一、数据库隔离级别
数据库隔离级别分为四类:未提交读、已提交读、可重复读和串行化。
其中,未提交读隔离级别最低,在并发事务中可能造成脏读、不可重复读和幻读的情况。
而串行化隔离级别最低,但没有办法并发的执行事务。
MySQL中默认的隔离级别为可重复读。
脏读 | 不可重复读 | 幻读 | |
未提交读 | √ | √ | √ |
已提交读 | √ | √ | |
可重复读 | √ | ||
串行化 |
实际运用中,通常使用可重复读+间隙锁,可在一定程度上解决幻读
二、数据库隔离级别的实现原理
----------------------------------------------------------------------
1. 未提交读
读操作:不加锁
写操作:行级共享锁,直到事务结束释放锁
----------------------------------------------------------------------
2. 已提交读
读操作:行级共享锁,执行完操作即刻释放锁
写操作:行级互斥锁,直到事务结束释放锁
----------------------------------------------------------------------
3. 可重复读
读操作:行级共享锁,直到事务结束释放锁
写操作:行级互斥锁,直到事务结束释放锁
----------------------------------------------------------------------
4. 串行化
读操作:表级共享锁,直到事务结束释放锁
写操作:表级互斥锁,直到事务结束释放锁
----------------------------------------------------------------------