1、事务隔离级别:
- 读未提交 read uncommitted: 会出现 脏读、不可重复读、幻读
- 读已提交 read committed: 会出现 不可重复读、幻读
- 可重复读 repeatable read :会出现幻读**(解决方式:MVCC多版本并发控制,next-key-lock)Mysql 默认隔离级别**
- 串行化 serializable
问题区别:
- 幻读:同一个事务,前后两次读取的数据不一样。
幻读的重点在于 INSERT
- 不可重复读:同一个事务,多次读同一数据。事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。
A读取事务数据后,再次读取却发现数据 发生改变或删除了;不可重复读重点在于 UPDATA 和 DELETE。
- 脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问 这个数据,然后使用了这个数据。
A修改数据,在完成提交前,B事务来读取,就是原始数据,但是A已经修改成新数据了
2、如何查看和设置Mysql事务隔离级别?
查看隔离级别:
查看当前MySQL版本:select version();
1、查看系统隔离级别: select @@global.tx_isolation;
2、查看会话隔离级别(版本5) : select @@ tx_isolation;
3、查看会话隔离级别(版本8) : select @@transaction_isolation;
我的是8:
设置隔离级别
注意:系统和会还的隔离级别可能是不一样的。
设置会话隔离级别: set session transaction isolation level repeatable read;