事务隔离级别


单个事务满足ACID;

读未提交
read uncommitted
读提交
read committed
不可重复读
read repeatable
序列化
serializable
脏写
dirty write
脏读
dirty read
不可重复读
Non-Repeatable Read
幻读
Phantom

各级别均是在事务并发执行时的可能发生的场景.

脏写

操作事务A事务B
a=2
A-1写a=3 未提交
B-1写a=4
此时 如果 事务A中a=4, 就是脏写.
commit无论是A还是B commit ,a的值都是4;(脏写)

事务A,事务B 同时更新数据 a.

通常后写的能覆盖已提交的先写的.

但(事务B)后写的能否覆盖未提交先写的,能就是脏写;

脏读

操作事务A事务B
a=2
A-1写 a=3 未提交
B-1读 a=3
此时,事务B能读到a=3就是脏读;

事务B读到事务A未提交的数据.

读a = 2 就不是脏读

一个事务A已经写入数据,但未提交,事务B能看到新写入数据吗? 能看到就是脏读

脏读,脏写总结

  1. 从数据库读时,只能看到已提交的数据;
  2. 向数据库写时,只能覆盖已提交的数据;
  3. 多事务并发写,先写需要加行写锁;(应对脏写,脏读策略)

不可重复读

事务先后读到

操作事务A事务B
a=2
B-1读 a=2未完成(读未提交)
A-1写 a=3;
A-2Commit
B-2读 a=3

因B-1 未上读锁,导致事务B在读取中,事务A写入了数据;

脏读和不可重复读区别

数据
脏读读到未提交数据未加写锁
不可重复读读到已提交数据未加读锁

幻读

操作事务A事务B
1.1销售额 1w
A-1读 ,统计1.1销售额 = 1w (10条数据)
B-1写,增加1.1售出衣服一件 ;commit
A-2读 ,统计1.1销售额 = 2w (11条数据)
1.1销售额 2w

事务B先后统计表范围内数据,事务A在之间怎加了一条行记录;

这是锁粒度不同(行锁,表锁)造成的;

相当于事务B只加了10条行锁,未加表锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值