阅读这篇有趣的文章后,我有一些问题。
下表显示了死锁情况:
T1 在表 t_lock1 上对所有 c1=5 的行持有 X 锁,而 T2 在表 t_lock2 上对所有 C1=1 的行持有 X 锁。
现在这些事务中的每一个都希望更新先前被另一个锁定的行。这会导致死锁。
问题 #1
- 事务是否获得锁?我知道从表中读取是通过共享锁完成的,而对表的写入是使用排他锁完成的(我说的是默认锁定设置)。
所以从这个例子看来,事务也持有一个锁……它是正确的吗?
问题2
...T1 对表 t_lock1 上 c1=5 的所有行持有 X 锁...
- 恕我直言,正如我所说,锁定不是每行(尽管可以进行,但作者没有提到) - 那么他为什么说:在所有行上 C1=5?