是不是事务repeatable read级别可以避免幻读

我不是稻草人 2015-10-11 08:29:57
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user` varchar(45) COLLATE latin1_general_ci DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `user` (`user`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

session 1:select @@tx_isolation; REPEATABLE-READ
session 2:select @@tx_isolation; REPEATABLE-READ
session 1: begin;
session 2: begin;
session 1:select * from t1; 结果为空
session 2:select * from t1; 结果为空
session 1:insert into t1(user) values('t1');
session 2:select * from t1; 结果为空
session 1:commit;
session 2:sellect * from t1; 结果为空
session 2:commit;
session 2:sellect * from t1; 能select 出user=t1来
2个问题:
1、是不是说明在repeatable read下,能解决幻读问题
2、为什么session 1 commit了一条insert(user=t1), session 2也还是select不出来user=t1。
...全文
371 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不是稻草人 2015-10-13
  • 打赏
  • 举报
回复
引用 2 楼 yupeigu 的回复:
对的,mysql中在repeatable-read隔离级别下,已解决了幻读的问题。

他解决幻读主要采用mvcc多版本并发控制,也就是,当开启一个事务的时候,会保证在这个事务里读取到的数据,都是在开始事务那个时间点的 lsn,而之后不管系统中有多少修改,插入,都只是去访问这个时间点之前的数据,所以就不会有影响。

在mysql中,实际上又用的就是2种隔离级别,一个是read committed,一个就是repeatable-read


引用 2 楼 yupeigu 的回复:
对的,mysql中在repeatable-read隔离级别下,已解决了幻读的问题。

他解决幻读主要采用mvcc多版本并发控制,也就是,当开启一个事务的时候,会保证在这个事务里读取到的数据,都是在开始事务那个时间点的 lsn,而之后不管系统中有多少修改,插入,都只是去访问这个时间点之前的数据,所以就不会有影响。

在mysql中,实际上又用的就是2种隔离级别,一个是read committed,一个就是repeatable-read


引用 2 楼 yupeigu 的回复:
对的,mysql中在repeatable-read隔离级别下,已解决了幻读的问题。

他解决幻读主要采用mvcc多版本并发控制,也就是,当开启一个事务的时候,会保证在这个事务里读取到的数据,都是在开始事务那个时间点的 lsn,而之后不管系统中有多少修改,插入,都只是去访问这个时间点之前的数据,所以就不会有影响。

在mysql中,实际上又用的就是2种隔离级别,一个是read committed,一个就是repeatable-read
谢谢哈。
LongRui888 2015-10-12
  • 打赏
  • 举报
回复

对的,mysql中在repeatable-read隔离级别下,已解决了幻读的问题。

他解决幻读主要采用mvcc多版本并发控制,也就是,当开启一个事务的时候,会保证在这个事务里读取到的数据,都是在开始事务那个时间点的 lsn,而之后不管系统中有多少修改,插入,都只是去访问这个时间点之前的数据,所以就不会有影响。

在mysql中,实际上又用的就是2种隔离级别,一个是read committed,一个就是repeatable-read
vachel66 2015-10-11
  • 打赏
  • 举报
回复
根据你测试结果,的确说明没有幻读问题,session 2 select 不出来应该是因为那条记录在事务开始时是不存在的

57,062

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧