验证mysql事务
事务等级划分
| 事务等级 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
read uncommitted(读未提交) |
√ |
√ |
√ |
read committed (读已提交) |
X |
√ |
√ |
repeatable read (重复读) |
X |
X |
√ |
serializable (序列化) |
X |
X |
X |
1. 准备阶段
set global transaction isolation level read committed; #全局 set session transaction isolation level READ UNCOMMITTED; #当前session set transaction isolation level read uncommitted; #仅对下一个事务生效 REPEATABLE READ #重复读 READ COMMITTED #读已提交 READ UNCOMMITTED #读未提交 SERIALIZABLE #序列化读 CREATE TABLE `user` ( `id` int NOT NULL COMMENT '主键', `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2.验证事务
开启两个会话,使用多个会话的好处是每次只需要执行一次更改事务就行了。当然也可以只开一个,那样每次都需要 去修改事务。- 两个会话首先都设置成 读未提交
- 然后查看当前事务等级
set session transaction isolation level READ UNCOMMITTED; select @@transaction_isolation;
两个都需要显示事务为
会话1 开启事务,更改数据库
BEGIN UPDATE `user` SET `name` = 'zhangsna-12888eee3' WHERE id = 1 # COMMIT
会话2 查看到 会话1 还没提交的更改
结果 显而易见的 读未提交,可以读取到该事务还未提交的事务
其他的可以自行去验证,方法都是一样的

浙公网安备 33010602011771号