数据库隔离级别和并发读取问题
相关博客
数据库隔离级别
1. 隔离级别
隔离级别 | 描述 |
---|---|
READ-UNCOMMITTED (读未提交数据) | 允许事务读取未被其他事务提交的变更数据, 会出现脏读、不可重复读和幻读问题 |
READ-COMMITTED (读已提交数据) | 只允许事务读取已经被其他事务提交的变更数据, 可避免脏读, 仍会出现不可重复读和幻读问题。 |
REPEATABLE-READ (可重复读) | 确保事务可以多次从一个字段中读取相同的值, 在此事务持续期间, 禁止其他事务对此字段的更新, 可以避免脏读和不可重复读, 仍会出现幻读问题。 |
SERIALIZABLE (序列化) | 确保事务可以从一个表中读取相同的行, 在这个事务持续期间, 禁止其他事务对该表执行插入、更新和删除操作, 可避免所有并发问题, 但性能非常低。 |
2. 数据库支持
数据库 | 支持的隔离级别 | 默认隔离级别 |
---|---|---|
Oracle | READ-COMMITTED, SERIALIZABLE | READ-COMMITTED |
MySQL | READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE | REPEATABLE-READ |
数据库并发读取问题
1. 第一类丢失更新
<TransactionA 的 rollback 会撤销掉 TransactionB 的 commit