当前位置:Gxlcms > 数据库问题 > mysql--事务隔离级别

mysql--事务隔离级别

时间:2021-07-01 10:21:17 帮助过:2人阅读

TABLES tablename WRITE; LOCK TABLES tablename READ; UPDATE ....; UNLOCK TABLES;

4.mysql中innodb引擎演示REPEATABLE-READ

创建一个innodb引擎的表

CREATE TABLE t_innodb(
`ID` int NOT NULL AUTO_INCREMENT,
`NUM` int,
PRIMARY KEY (`ID`)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
#表中插入一条记录
INSERT INTO t_innodb (`ID`, `NUM`) VALUES (NULL, 1);

技术分享

查看和设置设置隔离级别:

#查看InnoDB系统级别的事务隔离级别
SELECT @@global.tx_isolation;
#查看InnoDB会话级别的事务隔离级别
SELECT @@tx_isolation;

#设置InnoDB系统级别的事务隔离级别
set @@global.tx_isolation = ‘REPEATABLE-READ‘;
#设置InnoDB会话级别的事务隔离级别
set tx_isolation=‘REPEATABLE-READ‘;

技术分享

在session 1中开启事务,并且修改字段num的值:

START TRANSACTION;
UPDATE t_innodb SET num = num+ 1 WHERE id = 1;
#修改num的值后,查询到num变成了2
SELECT * from t_innodb WHERE id = 1;

技术分享

在命令行窗口开启session 2
技术分享

在session 1中commit事务
技术分享

在session 2中
技术分享

下面验证下EPEATABLE-READ会不会出现幻读
在session 1中再插入数据:
技术分享

在 session 2中
技术分享
可见:Mysql InnoDB的可重复读隔离级别和其他数据库的可重复读是有区别的,不会造成幻象读(phantom read)。
引用:
[1] MySQL中的行级锁SELECT FOR UPDATE 和LOCK IN SHARE MODE 区别
[2]mysql事务隔离级别以及有问题的读取(脏读,不可重复读,幻象读)
[3]MYSQL数据库事务处理和锁机制

mysql--事务隔离级别

标签:

人气教程排行