ACID 是为保证事务(transaction)是正确可靠的,所必须具备的四个特性:
以 A 给 B 转账100元为例:
MySQL事务是由 InnoDB 存储引擎实现的。
可以用如下的命令显式的开启事务:
另外,在自动提交(autocommit)模式下,我们执行的每一条 SQL 语句都是一条独立的事务;如果关闭了自动提交(autocommit)模式,则所有的 SQL 语句都在一个事务中,直到执行了 commit 或 rollback,该事务结束,同时开始了另外一个事务。
MySQL 事务的 ACID 特性靠如下机制实现:
Go 语言的 Gorm 提供了对于事务 *** 作的支持:
此外,还有嵌套事务以及手动事务等 *** 作,可以参考中文文档: learnkucom/docs/gorm/v…
@Transactional 注解必须添加在public方法上,private、protected方法上是无效的。
一般情况下,推荐将@Transactional 注解加在方法上,因为@Transactional直接加在类或者接口上,@Transactional注解会对类或者接口里面所有的public方法都有效,会影响性能。
事务是数据库 *** 作最小单元,把多件事当一件事来处理,是一组不可在分割的 *** 作集合。作为单个逻辑工作单元执行一系列 *** 作,这些 *** 作作为一个整体一起向系统提交,要么都执行,要么都不执行。
特性ACID(原子性、一致性、隔离性、持久性)
原子性:原子性是指事务包含的所有 *** 作要么全部成功,要么全部失败回滚,,因此事务 *** 作如果成功就必须要完全应用到数据库,如果 *** 作失败则不能对数据库有一点影响。
一致性:一致性是指事务必须使数据库从一个一致性状态转换到另一个一致性状态,就是说事务执行前后都必须处在一致性状态。
隔离性:隔离性使当多个用户访问数据库时,比如 *** 作同一张表,数据库开启的每一个事务,不能被其它事务干扰,多个并发事务之间相互隔离。
持久性:持久性是指一个事务一旦提交,对数据库中数据的改变是永久的,即使是数据库系统遇到故障也不会丢失提交的事务 *** 作。
关系数据库事务(DatabaseTransaction)是指一个可以包含多个步骤来完成所需要的任务的工作单元。通过事务将一系列不可分割的数据库 *** 作作为一个整体来执行,从而保证了数据库的完整性和有效性。其包含了一组数据库 *** 作命令的一个 *** 作序列,事务中所有命令作为一个整体向系统提交或撤销 *** 作请求(要么完全执行,要么完全不执行,即数据库命令系列要么都成功,要么都不成功)。
211事务特性数据库事务必须具备ACID特性,一个逻辑工作单元要成为事务,必须满足ACID属性。
ACID是指Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)。事务由数据库管理系统(DBMS)中的事务管理子系统负责处理。
1原子性原子性指的是一个事务(Transaction)中的所有 *** 作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
2一致性一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。
3隔离性隔离性指的是在并发环境中,当不同的事务同时 *** 纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
4持久性持久性指的是只要事务成功结束,它对数据库所做的更新就必须永久地保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
事务的:原子性、一致性、分离性、持久性原子性、一致性、分离性、持久性(1)原子性事务的原子性指的是,事务中包含的程序作为数据库的逻辑工作单位,它所做的对数据修改 *** 作要么全部执行,要么完全不执行
这种特性称为原子性
事务的原子性要求,如果把一个事务可看作是一个程序,它要么完整的被执行,要么完全不执行
就是说事务的 *** 纵序列或者完全应用到数据库或者完全不影响数据库
这种特性称为原子性
假如用户在一个事务内完成了对数据库的更新,这时所有的更新对外部世界必须是可见的,或者完全没有更新
前者称事务已提交,后者称事务撤消(或流产)
DBMS必须确保由成功提交的事务完成的所有 *** 纵在数据库内有完全的反映,而失败的事务对数据库完全没有影响
(2)一致性事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态
这种特性称为事务的一致性
假如数据库的状态满足所有的完整性约束,就说该数据库是一致的
一致性处理数据库中对所有语义约束的保护
假如数据库的状态满足所有的完整性约束,就说该数据库是一致的
例如,当数据库处于一致性状态S1时,对数据库执行一个事务,在事务执行期间假定数据库的状态是不一致的,当事务执行结束时,数据库处在一致性状态S2
(3)分离性分离性指并发的事务是相互隔离的
即一个事务内部的 *** 作及正在 *** 作的数据必须封锁起来,不被其它企图进行修改的事务看到
分离性是DBMS针对并发事务间的冲突提供的安全保证
DBMS可以通过加锁在并发执行的事务间提供不同级别的分离
假如并发交叉执行的事务没有任何控制, *** 纵相同的共享对象的多个并发事务的执行可能引起异常情况
DBMS可以在并发执行的事务间提供不同级别的分离
分离的级别和并发事务的吞吐量之间存在反比关系
较多事务的可分离性可能会带来较高的冲突和较多的事务流产
流产的事务要消耗资源,这些资源必须要重新被访问
因此,确保高分离级别的DBMS需要更多的开销
(4)持久性持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失
即一旦一个事务提交,DBMS保证它对数据库中数据的改变应该是永久性的,耐得住任何系统故障
持久性通过数据库备份和恢复来保证
持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失
即对已提交事务的更新能恢复
一旦一个事务被提交,DBMS必须保证提供适当的冗余,使其耐得住系统的故障
1原子性:就是begin开始一个事务后,在commit或rollback前时全部是一个整体,要全部都完成执行才能进行提交---->>>原子性也就是所有是一个整体
2一致性:事物中有错误的 *** 作所有其他语句不能执行要执行回滚(可能和原子性很像,注意区别开)
3隔离性:不赘述
4持久性:提交事务后不可逆 *** 作
connection就相当于数据库 *** 作中打开了一个事务的连接
此示例中包含了事务的一个批处理Batch
思路是一样的,先将预状态通道中的sql语句添加到批处理中进行就绪等待
等待调用预状态通道执行executeBatch()是开始进行批处理更新数据
之后返回一个int型的状态码数组--->>>产生改变的数据库行数
注意:添加到batch中后执行一定是进行Batch,而不是代码中注释的一行错误示范
以上就是关于关系型数据库事务的ACID特性与实现全部的内容,包括:关系型数据库事务的ACID特性与实现、什么是事务具有哪些特性mysql中、关系数据库事务的特性是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)