使用"可重复读取"应该可以产生幻影读取,但是如何产生呢?我需要它作为一个教授CS学生的例子.
我认为我必须在没有上限888的非索引字段x上进行"SELECT.where x<;=888",然后在另一个连接上插入一个值略低于888的新行.
只是它不起作用.我需要一张很大的桌子吗?还是别的什么?
使用"可重复读取"应该可以产生幻影读取,但是如何产生呢?我需要它作为一个教授CS学生的例子.
我认为我必须在没有上限888的非索引字段x上进行"SELECT.where x<;=888",然后在另一个连接上插入一个值略低于888的新行.
只是它不起作用.我需要一张很大的桌子吗?还是别的什么?
埃里克
我刚刚用大量行测试了它.
您永远不会在InnoDB MySQL上找到具有读提交或更受限隔离级别的幻影.文档中对此进行了说明:
可重复读取:对于一致读取,与已提交读取隔离级别有一个重要区别:同一事务read the snapshot established by the first read内的所有一致读取.此约定意味着,如果在同一事务中发出多个普通(非锁定)SELECT语句,则这些SELECT语句彼此之间也是一致的.请参阅第13.6.8.2节"一致的非锁定读取".
但在读取提交隔离级别中也找不到幻影:这是必要的,因为"幻影行"必须被阻止,MySQL复制和恢复才能工作.
更多详细信息:http://dev.mysql.com/doc/refman/5.1/en/set-transaction.html
我想你需要换成另一个数据库品牌来向你的学生展示幻影.我既用MSSQLSERVER也用Oracle.
嗯...你的第一个问题令人遗憾.