mysql事务的隔离级别

事务隔离级别脏读不可重复读幻读
读未提交(read-uncommitted)
读已提交(read-committed)
可重复读(repeatable-read)
串行化(serializable)

 

读未提交(READ UNCOMMITTED)(产生脏读)

  1. 开启两个会话A B

  2. 设置A的隔离级别为 READ UNCOMMITTED

  3. 开启一个会话B,并且启动一个事务

  4. B更新数据(不提交)

  5. A查询到B未提交的数据

  6. A查询的是B的脏数据

==脏读的解决方案: 设置隔离级别为READ COMMITTED==

读已提交(READ COMMITTED)(产生不可重复读)

  1. 开启两个会话A B

  2. 设置A的隔离级别为 READ COMMITTED

  3. 开启会话B,并且启动一个事务

  4. B更新数据(提交)

  5. A能查看到B提交的数据

  6. B更新数据(提交)

  7. A又能查看到B更新的数据

     

    ==同一个事务A中,出现了两次不同的结果(不可重复读)==

    ==不可重复读的解决方案: 设置隔离级别为REPEATABLE READ==

重复读(REPEATABLE READ)

  1. 开启两个会话A B

  2. 设置A的隔离级别为 REPEATABLE READ

  3. 开启会话B,并且启动一个事务

  4. B更新数据(提交)

  5. A不能查看到B提交的数据

  6. B更新数据(提交)

  7. A不能查看到B更新的数据

  8. A提交事务之后再查询,能看到B更新之后的数据

理论上说会产生幻读 但是这个问题被mysql自己解决了 所以这个隔离级别(也是默认级别)并不会产生幻读 要想测试幻读 需要用读已提交的隔离级别 

串行化

锁表  最安全  但是效率太低  基本上不用

 

常用的隔离级别就是默认的可重复读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值