概念
事务隔离级别(Isolation)是反映多事务之间不会产生影响,是提交并发访问的处理态度。
如果不考虑事务的隔离级别,会有三个问题:脏读、不可重复读、幻读的情况。
脏读:
在多事务之间,一个未提交事务读取到另一个未提交事务修改的数据。
例如A和B同时对数据C进行修改,这时A就可能读取到B还没有提交事务的数据。如果B把事务回滚了,那么A读取的数据就会有问题。这就是脏读。
不可重复读:
一个未提交的事务读取到另一个提交事务修改的数据。
例如A和B同时对数据C进行修改,都开启了数据,假设B对数据进行了修改,并且提交了事务,这时A就可以读取到B修改之后的数据。而A的事务还没有提交,这就是不可重复读。通常针对数据更新(UPDATE)操作。
幻读:
一个未提交事务读取到另一个提交事务添加的数据。
针对数据插(INSERT)操作来说的。假设事务A对某些行的内容作了更改,但是还未提交,此时事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,会发现好像刚刚的更改对于某些数据未起作用,但其实是事务B刚插入进来的,让用户感觉很魔幻,感觉出现了幻觉,这就叫幻读。
四种隔离级别
SQL 标准定义了四种隔离级别,MySQL 全都支持。这四种隔离级别分别是: READ UNCOMMITTED:读未提交,会产生脏读、不可重复读和幻读。 READ COMMITTED:读已提交,会产生不可重复读和幻读。 REPEATABLE READ:可重复读,会产生幻读。(MySQL的默认级别) SERIALIZABLE:串行化,不会产生脏读、不可重复读和幻读。(单线程执行) 均是查看资料,学习所得,如有侵权请联系我。
|