数据库隔离机制的实现
数据库隔离机制
- 串行化
- 可重复读
- 读已提交
- 读未提交
数据库事务可能导致的问题
- 脏读
- 不可重复读
- 幻读
脏读
事务A,先执行,处于未提交的状态:
insert into table values(1, xx);
事务B,后执行,也未提交:
select * from table ;
如果事务B能够读取到(1, xx)这条记录,事务A就对事务B产生了影响,这个影响叫做“脏读”,读到了未提交事务操作的记录。
不可重复读
事务A,先执行:
select * from table where id=1;
结果集为:
1, xx
事务B,后执行,并且提交:
update table set name=yy where id=1;
commit;
事务A,再次执行相同的查询:
select * from table where id=1;
结果集为:
1, yy
这次是已提交事务B对事务A产生的影响,这个影响叫做“不可重复读”,一个事务内相同的查询,得到了不同的结果。
和脏读区别在于,脏读在于读事务B还没有提交的数据,而不可重读是读取到事务B已经提交的数据