mysql - 多个对象持有共享锁,想升级为独占锁,sql中基于锁的并发控制是如何实现的?

标签 mysql sql transactions locking deadlock

我试图了解事务如何与 sql 中的锁一起工作并观看了 this great tutorial on youtube .

我不明白如果 2 个不同的事务在同一个对象上获得共享锁,然后其中一个或两个想要升级到对象上的排他锁以写入它,会发生什么情况。

视频中 1:12:55 处的示例会发生什么情况?

它是否会被归类为死锁并且其中一个事务是否必须回滚?他们中的一个肯定不能等到需要独占锁并删除它的共享锁,然后在第一个事务完成时继续,因为直到事务结束才能删除锁,他们可以吗?

干杯。

最佳答案

想要独占锁的事务必须等到所有其他共享锁都被移除后才能生效。在这种情况下,它会等待另一个事务释放它的共享锁,然后它会获得一个独占锁。

因此,如果另一个事务由于某些其他原因被初始事务阻止,这将导致死锁。因此,一个好的数据库设计应该尽量确保初始事务在等待独占锁时不会阻塞任何东西。

关于mysql - 多个对象持有共享锁,想升级为独占锁,sql中基于锁的并发控制是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20804015/

相关文章:

mysql - MySQL 中的时间是什么时候开始的

java - Android - php mysql。没有更新值

MySQL hell ...无法连接到数据库/tmp/mysql.sock

c# - 采取什么方法为用户缓存唯一的自动建议列表?

sql - 如何在 PostgreSQL 中有条件地查找模式

c# - Sql 事务中的隔离级别

php - 在MySQL中连接一个 'blog'表和 'comments'表

php - 存储来自 MySQL 的 10 个最新行

c# - 如何在 IAsyncEnumerable 发射器函数中正确使用 NpgsqlTransaction?

java - 预期 SQL 错误时出现 UnsupportedOperationException