一、背景
对于两个并发执行的事务,如果涉及到操作同一条记录的时候,可能会发生问题。
因为并发操作会带来数据的不一致性,包括
- 脏读、
- 不可重复读、
- 幻读
等。
1. 脏读(Dirty Read)
一个事务会读到另一个事务更新后但未提交的数据,如果另一个事务回滚,那么当前事务读到的数据就是脏数据,这就是脏读(Dirty Read)。
2. 不可重复读(Non Repeatable Read)
不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。
3. 幻读(Phantom Read)
幻读是指,在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了。
二、事务的隔离级别
数据库系统提供了隔离级别来让我们有针对性地选择事务的隔离级别,避免数据不一致的问题。
SQL标准定义了4种隔离级别,分别对应可能出现的数据不一致的情况:
Isolation Level脏读(Dirty Read)不可重复读(Non Repeatable Read)幻读(Phantom Read)Read UncommittedYesYesYesRead Committed-YesYesRepeatable Read--YesSerializable---
https://www.liaoxuefeng.com/wiki/1177760294764384/1179611198786848
https://blog.csdn.net/yamaxifeng_132/article/details/86683909