如果可序列化隔离级别有效,表X的内容是什么?
由于可串行化,我认为事务B不能执行任何操作。因此,行b不被放置在表X中,并且不执行事务A的删除行b操作。结果,表X仅包括行a;然而,这个理论被我的教授拒绝,没有任何解释。
Transaction A Transaction B
1) Begin ....
2) Insert row a Begin
3) .... Insert row b
4) .... Delete row a
5) Delete row b ....
6) Commit ....
7) Commit
有谁可以解释为什么我的理论是假的?
答案 0 :(得分:0)
隔离级别仅与本地事务及其数据视图有关,而与其他事务无关。其他连接的客户端可以看到各种形式的奇怪数据,因为它们不属于任何事务隔离。至少在MySQL中,可序列化隔离级别不包含任何表锁。因此,TXA不会阻止其他写操作的发生。
TXA将在t5结束并影响零行。
TXB将在t4时影响零行并完成。
该表将包含2行,a和b。
对于其他隔离级别,结果将有所不同。
使用表锁,计时如下所示:
0) Begin ....
1) LOCK TBL WRITE ....
2) Insert row a Begin
3) .... ....
4) .... ....
5) Delete row b ....
6) Commit ....
8) UNLOCK ....
7) Insert row b
8) Delete row a
9) Commit