并发事务三大问题
通常,两个并发事务同时访问数据库时,可能存在以下三个问题:
- 幻想读:
- 事务T1读取一条指定where条件的语句,返回结果集;
- 事务T2插入一条新纪录恰好满足T1的where条件;
- 事务T1再次查询,结果看到了T2插入的那条记录;
- 不可重复读:
- 事务T1读取一条记录;
- 事务T2修改了T1刚刚读取的记录;
- 事务T1再次查询,读到的是T2修改后的记录;
- 脏读:
- 事务T1更新了一条记录,但是未做提交;
- 事务T2读取了T1更新后的记录;
- 事务T1进行回滚操作,取消了刚才的修改;
事务隔离级别
所谓的事务隔离级别,指的是一个事务对数据库的修改与并行的另一个事务的隔离级别。
为了处理上述可能出现的问题,SQL92标准定义了以下四种事务隔离级别:
关于事务和锁方面的内容,需要不断细化,感觉目前缺失的知识内容太多,暂时不深入了。