mysql 隔离级别示例说明
隔离级别说明
1.read uncommitted : 读取尚未提交的数据 :就是脏读
2.read committed:读取已经提交的数据 :可以解决脏读,但是出现不可重复读
3.repeatable read:可重读:可以解决脏读 和 不可重复读 ---mysql默认的
4.serializable:可串行化:一个个事务排成序列的形式。事务一个挨一个执行,等待前一个事务commit完,后面的事务才可以顺序执行,容易产生死锁
准备工作
1.创建两个mysql客户端
2.创建测试表和数据
CREATE TABLE `user` (
`id` varchar(64) NOT NULL COMMENT 'id',
`name` varchar(64) DEFAULT NULL COMMENT '名称',
`age` int(2) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB COMMENT = '用户测试表';
INSERT INTO `user` VALUES ('1', 'AAA', 12);
测试mysql的隔离级别
查看隔离级别
SELECT @@tx_isolation;
默认为:repeatable read
设置隔离级别
set session transaction isolation level ********
1.read uncommitted
2.read committed
3.repeatable read
4.serializable
补充
1.读已提交(read committed)和可重复读(repeatable read)的实现方式是通过MVCC来解决的
2.read uncimmitted由于存在脏读,能读到未提交事务的数据行,而MVCC的创建版本和删除版本只要在事务提交后才会产生。所以不适用。
3.串行化由于是会对所涉及到的表加锁,并非行锁,自然也就不存在行的版本控制问题