免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1424 | 回复: 0
打印 上一主题 下一主题

大侠帮忙看看,谢谢,小弟搞不清楚 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-10 20:19 |只看该作者 |倒序浏览
这是书上写的:
REPEATABLE READ,可重复读,完全适用MVCC,只能读取在它开始之前已经提交的事务对数据库的修改,在它开始以后,所有其他事务对数据库的修改对它来说均不可见

SELECT  Innodb检查没行数据,确保他们符合两个标准:       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级别

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP