InnoDB事务隔离级别测试

InnoDB事务隔离级别测试(复习使用)

命令

查看事务隔离级别

show variables like '%tx_isolation%';

+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

设置事务隔离级别

## 设置读未提交
set global transaction isolation level read uncommitted;
## 设置读已提交
set global transaction isolation level read committed;
## 设置可重复读
set global transaction isolation level repeatable read;
## 设置序列化
set global transaction isolation level serializable;

数据准备

创建表

CREATE TABLE `user_info` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID',
  `user_name` varchar(32) NOT NULL COMMENT '用户姓名',
  `age` int(3) NOT NULL COMMENT '用户年龄',
  `sex` char(1) NOT NULL COMMENT '用户性别',
  `address` varchar(128) NOT NULL COMMENT '用户住址',
  `phone` varchar(15) NOT NULL COMMENT '联系电话',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`),
  KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 COMMENT='用户信息表'

初始化数据

INSERT INTO user_info (id, user_id, user_name, age, sex, address, phone, create_time, update_time) VALUES (1, 1, 'user001', 20, '1', '北京市海淀区中关村', '13800001122', '2022-06-06 23:06:01', '2022-06-06 23:06:01');

+----+---------+-----------+-----+-----+-----------------------------+-------------+---------------------+---------------------+
| id | user_id | user_name | age | sex | address                     | phone       | create_time         | update_time         |
+----+---------+-----------+-----+-----+-----------------------------+-------------+---------------------+---------------------+
|  1 |       1 | user001   |  20 | 1   | 北京市海淀区中关村             | 13800001122 | 2022-06-06 23:06:01 | 2022-06-06 23:06:01 |
+----+---------+-----------+-----+-----+-----------------------------+-------------+---------------------+---------------------+
1 row in set (0.00 sec)

验证

隔离级别会话A操作会话B操作
READ-UNCOMMITTED新插入记录可以读到未提交时新插入的记录
-修改记录可以读到未提交时的修改记录
-删除记录可以感知未提交时的删除记录操作
READ-COMMITTED新插入记录可以读到提交后新插入的记录
-修改记录可以读到提交后的修改记录
-删除记录可以感知提交后删除记录操作
REPEATABLE-READ新插入记录读不到新插入的记录,新记录不可见
-修改记录读取不到修改后的记录,一直读取原值
-删除记录感知不到删除记录操作,一直读取原值
SERIALIZABLE新插入记录会阻塞,直到另一个会话事务结束读取会阻塞直到另一个会话事务结束,只能读到提交后的记录
-修改记录会阻塞,直到另一个会话事务结束读取会阻塞直到另一个会话事务结束,只能读到提交后的记录
-删除记录会阻塞,直到另一个会话事务结束读取会阻塞直到另一个会话事务结束,只能读到提交后的记录
posted @ 2022-06-16 17:56  大摩羯先生  阅读(24)  评论(0编辑  收藏  举报