前提
# 设置数据库隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别;
# 查询事务隔离级别
select @@transaction_isolation;
事务处理的分离水平对应的数据整合情况:
隔离级别 | 非提交读取(脏读) | 不可重复读取 | 幻读 |
---|---|---|---|
READ UNCOMMITED | √ | √ | √ |
READ COMMITED | × | √ | √ |
REPEATABLE READ | × | × | √ |
SERIALIZABLE | × | × | × |
建表
CREATE TABLE `student2` (
`id` int(4) NOT NULL AUTO_INCREMENT COMMENT '学号',
`name` varchar(30) NOT NULL DEFAULT '匿名' COMMENT '姓名',
`passwd` varchar(20) NOT NULL DEFAULT '123456' COMMENT '密码',
`sex` varchar(20) NOT NULL DEFAULT '女' COMMENT '性别',
`birthday` date DEFAULT NULL COMMENT '出生日期',
`address` varchar(100) DEFAULT NULL COMMENT '家庭住址',
`email` varchar(50) DEFAULT NULL COMMENT '邮箱',
`grade_id` int(10) DEFAULT '1',
PRIMARY KEY (`id`),
KEY `fk_grade_id` (`grade_id`),
CONSTRAINT `fk_grade_id` FOREIGN KEY (`grade_id`) REFERENCES `grade` (`grade_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
插入数据
insert into student2 (name) values ('张三');
读未提交(READ UNCOMMITTED)
脏读
不可重复读
幻读
读已提交(READ COMMITTED)
无 脏读
不可重复读
幻读
可重复读(REPEATABLE READ)
无 脏读
无 不可重复读
幻读
串行化(SERIALIZABLE)
无 脏读
事务 1 的 update 语句等待 事务 2 执行完毕才能执行(或者等待至指定超时时间后超时)
无 不可重复读
无 幻读