今天看书看到孤立性等级的时候有四个等级:序列化 可重复读 提交的读 未提交的读
其中的可重复读有说到这样一种情况“虚拟读”或“虚拟插入”,其中有这样一段话是这样的
可重复读和序列化孤立级很相似,可它有一个很重要的不同点:虽然一个事务不能看到其他正在执行的当前事务做出的变化,但是它可以看到新的记录(其他事务添加到数据库的)。这有时被称作虚拟读或者虚拟插入,因为只在事务用过INSERT语句向数据库插入一个新纪录时它才发生。当执行一个SELECT查询是,其他同一时间正在进行的事务将会突然看到这个新的虚幻的行。可我进行了一下试验,发现好像并不是这样的。
我打开了两个事务,假设为A和B,分别设置其事务孤立级为REPEATABLE READ。 完了在A事务中输入start transaction,接着向表test中INSERT一条新的记录,可是此时在B事务中对表TEST进行SELECT并不能看到新加入的数据,只有在A事务中COMMIT以后,在B事务中SELECT才可以看到新插入的记录。请教一下是我对可重复读这种孤立级的理解有问题还是我测试的方法有问题?谢谢
其中的可重复读有说到这样一种情况“虚拟读”或“虚拟插入”,其中有这样一段话是这样的
可重复读和序列化孤立级很相似,可它有一个很重要的不同点:虽然一个事务不能看到其他正在执行的当前事务做出的变化,但是它可以看到新的记录(其他事务添加到数据库的)。这有时被称作虚拟读或者虚拟插入,因为只在事务用过INSERT语句向数据库插入一个新纪录时它才发生。当执行一个SELECT查询是,其他同一时间正在进行的事务将会突然看到这个新的虚幻的行。可我进行了一下试验,发现好像并不是这样的。
我打开了两个事务,假设为A和B,分别设置其事务孤立级为REPEATABLE READ。 完了在A事务中输入start transaction,接着向表test中INSERT一条新的记录,可是此时在B事务中对表TEST进行SELECT并不能看到新加入的数据,只有在A事务中COMMIT以后,在B事务中SELECT才可以看到新插入的记录。请教一下是我对可重复读这种孤立级的理解有问题还是我测试的方法有问题?谢谢
假如A还没commit, 就可以看到, 那就是read_uncommit了
发现和表的类型有关系
比如说我把表改为HEAP或者MYISAM时,A事务进行数据修改后即便不COMMIT时B事务就可以读取到数据的变化,而此时我查@@tx_isolation变量发现此时的孤立级别仍然设置的是READ-REPEATABLE比较奇怪,呵呵
以前我在看ORACLE文档的时候就被搞得头昏昏的我最近看的是本叫《MYSQL完全手册》的书
有些英文翻成中文也比较晦涩难理解
如果将来需要用的到MYSQL我再深入的学好了