什么是事务?( ACID 是什么?)

一、什么是事务?

  • 事务是恢复和并发控制的基本单位
  • 事务的四个基本特征:原子性,一致性,隔离性,持久性

二、事务的四个基本特征

  1. Atomicity(原子性): 一个事务(transaction)中的所有操作,或者全部完成,或者全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。即,事务不可分割、不可约简。
  2. Consistency(一致性): 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设约束、触发器、级联回滚等。
    (一致性是指数据处于一种语义上的有意义且正确的状态。用AB转账举例,A账户总共5000元,不论怎么他怎么给B转,AB账户合计总额还是5000.这就是一致性。)
  3. Isolation(隔离性): 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
  4. Durability(持久性): 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

三、事务的隔离级别

  • READ-UNCOMMITTED:未提交读,最低隔离级别、事务未提交前,就可被其他事务读取(会出现幻读、脏读、不可重复读)。

  • READ-COMMITTED:提交读,一个事务提交后才能被其他事务读取到(会造成幻读、不可重复读)。

    他的问题是:事务A事先读取了数据,事务B紧接了更新了数据,并提交了事务,而事务A再次读取该数据时,数据已经发生了改变,造成了不可重复读。

  • REPEATABLE-READ:可重复读,默认级别,保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据(会造成幻读)。

    他的问题是:比如事务A 将 T表 中所有工资不到 10000元 的员工的工资改为10000元,在事务A执行结束尚未提交时,事务B又插入了一条(或删除操作)工资不满10000元的员工记录,然后再提交事务A,事务B。事务A好像发生了幻觉,没有操作成功一样,这是因为“可重复读”锁定的是,已经读取的记录,而不是锁定整张表(或者超出读取范围的数据),可重复读限制了事务本身涉及数据的update行为,但是无法限制事务自身以外的数据。

  • SERIALIZABLE:序列化,代价最高最可靠的隔离级别,该隔离级别能防止脏读、不可重复读、幻读。

四、事务级别带来的影响解释

  • 脏读 : 如果一个事务A读取了一条记录r,并修改了该记录,事务A尚未提交时,事务B读取了r,如果事务A最后回滚了(因某种原因),那么事务B读了一条无效的记录。
  • 重复读 : 是指在一个事务内,多次读同一数据。
  • 幻读 : 指同一个事务内多次查询返回的结果集不一样。比如同一个事务 A 第一次查询时候有 n 条记录,但是第二次同等条件下查询却有 n+1条记录,这就好像产生了幻觉。发生幻读的原因也是另外一个事务新增或者删除或者修改了第一个事务结果集里面的数据,同一个记录的数据内容被修改了,所有数据行的记录就变多或者变少了。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值