隔离级别 | 脏读 | 不可重复度 | 幻读 |
---|---|---|---|
read uncommitted | √ | √ | √ |
read committed | × | √ | √ |
repeatable read(默认) | × | × | √ |
serializable | × | × | × |
- 查看事务的隔离级别
select @@transaction_isolation
- 设置事务的隔离级别
set [session|global] transaction isolation level {read uncommitted | read committed | repeatable read | serializable}
事务隔离级别演示
- read uncommited
事务A能读取事务B未提交的事务。
-
read commited
事务A读取到事务B提交的事务。read commited解决了脏读的问题,但是不能解决不可重复读的问题。
同样的查询语句,事务A的两次查询结果不一致。 -
repeatable read
解决了脏读和不可重复度的问题,但是解决不了幻读的问题。
事务A第一次查询id为3的数据,查询不到。事务B往表里边插入一条id为3的数据,此时事务A再往表里边插入id为3的数据时,发现id为3的数据已经存在,而再次(第二、第三次)查询的时候却不能将id为3的数据查询出来,这种情况即为幻读。
- serializable
事务A往表里边插入一条ID为4的数据,此时事务B在往表里边插入ID为4的数据时,会发生阻塞,直到事务A将事务提交之后,事务B在能继续进行操作。serializable解决了脏读、不可重复度、幻读的问题,隔离级别最高。