事务隔离级别

事务原则

atomicity:原子性
consistency:一致性
isolation:隔离性
durability:持久性

事务问题

脏读:脏读指的是读到了其他事务未提交的数据。

不可重复读:一个事务内,不同时刻读到的同一批数据不一样了。通常针对数据更新操作(update)。

幻读:一个事务内,读到了其他事务提交的新数据。针对插入操作(insert)。

事务隔离级别

读未提交(read uncommitted):任何事务对数据的修改都会第一时间暴露给其他事务,即使事务还没有提交。会导致三类问题。
读提交(read committed):一个事务只能读到其他事务已经提交过的数据。会导致不可重复读,幻读。(流行级别)
可重复读(repeatable read):事务不会读到其他事务对已有数据的修改,即使其他事务已提交。会导致幻读。
串行化(serializable):将事务的执行变为顺序执行,后一个事务的执行必须等待前一个事务结束。

MySQL的可重复读级别

MySQL使用mvcc(多版本并发控制)原理。
MySQL的rr级别
每个事务一个版本,MySQL的rr级别是在事务开始的时候生成一个当前事务全局性的快照,事务在提交前重复读时返回快照的值。
解决并发写及幻读:并发写问题的解决方式就是行锁,而解决幻读用的也是锁,叫做间隙锁,MySQL 把行锁和间隙锁合并在一起,解决了并发写和幻读的问题,这个锁叫做 Next-Key锁。
假设有以下两条记录的表
示例表
数据库中维护一套有序的B+树来快速定位行记录。
B+树
事务
事务A的update操作会为 age=10 加行锁,为age<10和10<age<30加间隙锁,事务B的insert操作因此阻塞直到事务A提交才能执行。
这是有索引的情况,如果 age 不是索引列,那么数据库会为整个表加上间隙锁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值