上面一篇文章说了我使用了PHP的文件锁来制作了一个事务隔离。有些朋友说可以使用for update直接实现。于是去找了一些for update的资料,发现其中有一个点一直被他们说错了。于是就有了这篇文章。
很多文章在说到select for update的时候,都说一旦使用,其他事务就无法更新数据了,这样可以保证事务内数据一致。
但是他们没有说到的是,一旦有事务使用,不但无法更新,其他事务压根连查询的权利都没有。
我们先开2个事务来模拟访问
事务1先使用for update查询
然后事务2也开始查询
这时候就会看到,事务2已经查不到数据,在等待了。
然后事务1完成提交
这时候事务2就能查到数据,而且是事务1修改后的新数据了。
所以,使用for update确实可以实现我们的数据隔离安全,但是也要在进入事务的第一时间使用,避免节外生枝。