使用“可重复读取”应该可以产生幻像读取,但是如何?我需要它作为教CS学生的例子。
我认为我必须在没有索引上限888的非索引字段x上进行“ SELECT … WHERE x <= 888”,然后在另一个连接上插入一个新行,其值刚好在888以下。
除非它不起作用。我需要一张大桌子吗?或者是其他东西?
埃里克
我来自大量行的测试。
您将永远不会在InnoDB mysql上找到具有已提交读或更高限制的隔离级别的幻像。在文档中对此进行了解释:
可重复读取:对于一致读取,与READ COMMITTED隔离级别有一个重要区别:同一事务内的所有一致读取均读取 由第一次读取建立的快照 。此约定意味着,如果您在同一事务中发出多个普通(非锁定)SELECT语句,则这些SELECT语句彼此之间也是一致的。请参见第13.6.8.2节“一致的非锁定读取”。
但是您也无法在读提交的隔离级别中找到幻像:这是必需的,因为必须阻止“幻像行”才能使MySQL复制和恢复正常工作。
更详细的信息:http : //dev.mysql.com/doc/refman/5.1/en/set- transaction.html
我认为您将需要转到另一个数据库品牌向学生展示幻影。我同时使用MSSQLSERVER和Oracle。
好吧…很遗憾您的第一个问题。