首先对于SQL8的操作:
select @@transaction_isolation;#查看隔离级别
set transaction isolation level read COMMITTED;#设置事务级别
隔离级别 | 脏读 | 不可重复读 | 幻读 | 备注 |
---|---|---|---|---|
read commited | √ | √ | √ | |
read uncommited | × | √ | √ | 在oracle中默认 |
repeatable read | × | × | √ | 在mysql中默认,在8.0版本貌似也不支持幻读 |
serializable | × | × | √ |
关于出现的三种隔离问题,我的理解如下:
- 脏读
两项事务A、B同时进行时,事务A在进程中更新未提交,事务B在进行中每次读的结果不一样,主要涉及到update操作。 - 不可重复读
两项事务A、B同时进行时,事务A更新并提交后,事务B在进行中,每次读的结果不一样,主要涉及update操作。 - 幻读
两项事务A、B同时进行时,事务A插入和删除不管是否提交,会使事务B的操作受影响,主要涉及insert和delete操作。