我试图了解事务如何与 sql 中的锁一起工作并观看了 this great tutorial on youtube .
我不明白如果 2 个不同的事务在同一个对象上获得共享锁,然后其中一个或两个想要升级到对象上的排他锁以写入它,会发生什么情况。
视频中 1:12:55 处的示例会发生什么情况?
它是否会被归类为死锁并且其中一个事务是否必须回滚?他们中的一个肯定不能等到需要独占锁并删除它的共享锁,然后在第一个事务完成时继续,因为直到事务结束才能删除锁,他们可以吗?
干杯。
最佳答案
想要独占锁的事务必须等到所有其他共享锁都被移除后才能生效。在这种情况下,它会等待另一个事务释放它的共享锁,然后它会获得一个独占锁。
因此,如果另一个事务由于某些其他原因被初始事务阻止,这将导致死锁。因此,一个好的数据库设计应该尽量确保初始事务在等待独占锁时不会阻塞任何东西。
关于mysql - 多个对象持有共享锁,想升级为独占锁,sql中基于锁的并发控制是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20804015/