本文仅供学习和参考
事务
目录:
1、原则
2、隔离级别
3、隔离级别所允许的并发问题
1、原则
原子性(Atomic),一致性(Consistency),隔离性(Isolation),持久性(Durability)
2、隔离级别
READ UNCOMMITTED (未提交读)
READ COMMITTED (提交读)
REPEATABLE READ (可重复读)
SERIALIZABLE (序列化)
3、两个并发事务访问同一条数据可能存在的问题
脏读:事务T1更新了一条数据,还未提交,事务T2读取同一条数据时是T1未提交的数据;如果T1回滚了,T2读到的数据就是无效的,脏数据。
不可重复读:一个事务对同一条记录读取2次,得到了不同的结果。事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
可重复读:事务T2对这条数据视图修改回会一直等待事务T1结束。
隔离级别 | 脏读 | 不可重复读 | 幻想读 |
READ UNCOMMITTED (未提交读) | 允许 | 允许 | 允许 |
READ COMMITTED (提交读) | 不允许 | 允许 | 允许 |
REPEATABLE READ (可重复读) | 不允许 | 不允许 | 允许 |
SERIALIZABLE (序列化) | 不允许 | 不允许 | 不允许 |
一般情况下实物隔离级别设置为READ COMMITTED