nsdns 发表于 2014-11-10 20:19

大侠帮忙看看,谢谢,小弟搞不清楚

这是书上写的:
REPEATABLE READ,可重复读,完全适用MVCC,只能读取在它开始之前已经提交的事务对数据库的修改,在它开始以后,所有其他事务对数据库的修改对它来说均不可见

SELECTInnodb检查没行数据,确保他们符合两个标准:       1、InnoDB只查找版本早于当前事务版本的数据行(也就是数据行的版本必须 小于等于事务的版本),这确保当前事务读取的行都是事务之前已经存在的,或者是由当前事务创建或修改的行       2、行的删除操作的版本一定是未定义的或者大于当前事务的版本号。确定了当 前事务开始之前,行没有被删除(2)   符合了以上两点则返回查询结果。

我做两个测试:
一个进程先执行:这个时候balance=0
START TRANSACTION;
SELECT SLEEP(16);
SELECT * from users WHERE id=1;
COMMIT;

然后另外一个进程再执行:
UPDATE users SET balance=100 where id=1;

然后进程1查出来的结果balance=100
但是不是说其他修改不可见吗,他执行之前balance=0,然后中间另外一个进程执行了SET balance=100 where id=1;
但为何他发现了其他事务的更改,查出了balance=100.照道理不是应该查出等于0吗?
我是默认的REPEATABLE READ级别

页: [1]
查看完整版本: 大侠帮忙看看,谢谢,小弟搞不清楚