MissFuTT 2020-05-11
transaction_isolation
tx_isolation
GLOBAL
和SESSION
show [GLOBAL|SESSION] VARIABLES like ‘transaction_isolation‘
SElECT @@transation_isolation
SET [SESSION|GLOBAL] transaction_isolation=[0|1|2|3]
问题:出现脏数据
问题:不可重复读
问题:幻读
-- 事务一 BEGIN; SELECT * FROM table00; /* 查询结果: |id|name| |-|-| |1|wu| */ -- 此时系统遇到并发,首先执行完事务二 INSERT INTO table00 VALUES(2,"we"); -- 执行失败 SELECT * FROM table00; /* 查询结果不变:(可重复读但出现幻觉——明明不存在却无法插入) |id|name| |-|-| |1|wu| */ COMMIT; -- 事务二 BEGIN; SELECT * FROM table00; /* 查询结果: |id|name| |-|-| |1|wu| */ INSERT INTO table00 VALUES(2,"we"); -- 插入 SELECT * FROM table00; /* 查询结果: (成功插入) |id|name| |-|-| |1|wu| |2|we| */ COMMIT;
这是最高的隔离级别,它通过强制事务排序,使之不可能相互冲突。换言之,它会在每条select语句后自动加上lock in share mode,为每个查询操作施加一个共享锁。在这个级别,可能导致大量的锁等待现象。该隔离级别主要用于InnoDB存储引擎的分布式事务。