MySQL乱弹笔记

MySQL Innodb 隔离级别

2020-11-11  本文已影响0人  醉红尘丶

环境准备

官方文档:https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html
测试版本:MySQL 5.7.25
测试表:

CREATE TABLE `t` (
  `id` int(11) NOT NULL,
  `name` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

READ UNCOMMITTED

现象:
在RU隔离级别中,其他事务操作的未提交的事务修改,能被当前事务读取到。

session 1 session 2
set transaction_isolation = 'READ-UNCOMMITTED'; set transaction_isolation = 'READ-UNCOMMITTED';
begin;
begin;
select * from t;(空)
insert into t values(1,'张三'); 未提交
select * from t;(有值)

READ COMMITTED

现象:
在RC隔离级别中,其他事务操作的已提交的事务修改,能被当前事务读取到。

session 1 session 2
set transaction_isolation = 'READ-COMMITTED'; set transaction_isolation = 'READ-COMMITTED';
begin;
begin;
select * from t;(空)
insert into t values(1,'张三');commit;
select * from t;(有值)

REPEATABLE READ

现象:
在RR隔离级别的同一事务中,多次select 的结果集是一致的。

session 1 session 2
begin;
begin;
select * from t;(空)
insert into t values(1,'张三');commit;
select * from t;(空)

SERIALIZABLE

现象:
在串行隔离级别中,事务只能串行执行,后一个事务需要等待前一个事务完成后才能执行写操作。

session 1 session 2
set transaction_isolation = 'SERIALIZABLE'; set transaction_isolation = 'SERIALIZABLE';
begin;
begin;
select * from t;(空)
insert into t values(1,'张三'); 卡住,等待前一个事务
上一篇 下一篇

猜你喜欢

热点阅读