事务并发处理可能存在的异常
脏读 Dirty Read
读未提交
不可重复读 Unrepeatable Read
两次读取的结果不同
幻读 Phantom Read
事务隔离级别
级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交 | 允许 | 允许 | 允许 |
读提交 | 禁止 | 允许 | 允许 |
可重复读 | 禁止 | 禁止 | 允许 |
可串行化 | 禁止 | 禁止 | 禁止 |
读未提交
* 允许读到未提交的数据,未使用锁。
读提交
* 只能读到已经提交的内容,可以避免脏读。 默认隔离级别。
可重复读
* 保证一个事务在相同查询条件下两次查询得到的数据结果是一致的。
可串行化
* 解决事务读取中所有可能出现的异常情况,但是牺牲了并发性。
总结
1. 隔离级别越低,系统并发度越大,出现问题的可能性也越大。
2. 具体开发中使用什么隔离级别,需要依据具体情况而定。
3. 一般使用读提交隔离级别,配合日志的双一。
4. 可重复读隔离级别,一般用于数据库备份。