mysql 事务隔离级别

事务4个特征


  1.原子性(Atomicity):一件事情,要么做完要不就不做;
  2.一致性(Consistency):指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和
执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、
转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性。
  3.隔离性(Isolation):事务是相互隔离的,中间状态不可见
  4.持久性(Durability):持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库
系统遇到故障的情况下也不会丢失提交事务的操作。例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作
完成,当我们程序执行完成直到看到提示后,就可以认定事务已经正确提交,即使这时候数据库出现了问题,也必须要将我们的
事务完全执行完成。否则的话就会造成我们虽然看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。这是不允许的。


事务隔离级别
  1.读未提交(read uncommitted 简称ru):一个事务还没有提交时,它做的变更就能被别的事务看到。
  2.读提交(read committed 简称rc):一个事物提交之后,它做的变更才会被其他事务看到。
  3.可重复读(repeatable read 简称rr):一个事物执行过程中看到的数据,总是跟这个事务在启动时看到的数据是一致的。
未提交变更对其他事务也是不可见的。
  4.串行化(serializable):对于同一行记录,写会加“写锁”,读会加“读锁”,当出现锁冲突时,后访问的事务需要等前一个事务执行完成,
  才能继续执行。


其中,“读提交”和“可重复读”比较难理解,这里用一个例子说明一下。

假设数据表中 T 中只有一列,其中一行的值为 1,下面是按照时间顺序执行两个事务的行为。

create table T(c int) engine = InnoDB;
insert into T(c) values(1);

在这里插入图片描述

在不同的隔离级别下,事务A查到的结果是不一样的:

“读未提交”:  则 v1 的值是2,这时候事务 B 虽然还没有提交,但是结果已经被事务 A 看到了,因此 v2、v3 也都是2。
“读提交”:    则 v1 是1,v2 的值是 2 ,事务 B 的更新在提交后才被事务 A 看到。所以 v3 的值也是 2。
“可重复读”:    则 v1、v2是 1,v3 是2,之所以 v2 还是1,遵循的就是这个要求:事务在执行期间看到的数据前后必须是一致的。
“串行化”:    则在事务 B 执行“将 1 改成 2”的时候,会被锁住,直到事务 A 提交后,事务 B 才可以继续执行,所以从事务 A 的角度看,v1、v2的值是1,v3的值是2。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值