【发布时间】:2021-12-12 21:32:53
【问题描述】:
我在一次采访中被问到,“在 MySQL 数据库中,如果 Transaction(2) 尝试获取共享/独占锁,但另一个 Transaction{1) 已经在同一资源上拥有独占锁,会发生什么情况?”
我的回答很简单,Transaction(2) 一直等到 Transaction(1) 的提交或回滚。然后是后续问题。 如果是这样,
- 第二个事务将在哪里等待。 (比如阻塞队列类型的实现?)
- 如何在事务提交或回滚时通知第二个事务(1)?
- 如果有多个事务在等待被 Transaction(1) 锁定的同一资源,如何解决锁定问题?
【问题讨论】:
-
这是 MySQL 问题还是 Postgres 问题之一或两者兼而有之?
-
这是一般 DBMS 问题。所以两者兼而有之。如果我们确实需要一个答案,我们可以假设这是一个 MySQL 数据库。
-
引擎可以确定存在死锁并可以中止一个或多个等待事务。
标签: mysql transactions locking