gpt4 book ai didi

mysql - 当另一个事务具有排他锁时,MySQL 如何允许获取共享锁?

转载 作者:行者123 更新时间:2023-12-04 09:10:16 24 4
gpt4 key购买 nike

我试图了解事务的工作原理,但遇到了一个对我来说意义不大的场景。我希望有人能帮助我理解它。

我有两笔交易

事务 1

 BEGIN; update data set val = val + 1 where id = 1

交易 2

BEGIN; select * from data

我打开了两个终端,我开始第一个事务并运行更新查询。据推测,这会为 ID 为 1 的元组上的事务 1 提供独占锁。

之后,在提交第一个事务之前,我在另一个终端中运行第二个查询。我原以为它会停止,因为第一个事务具有排他锁,这将阻止此事务获取 ID 为 1 的元组上的读锁。

但是,mysql 运行选择查询并返回“不脏”数据。

谁能给我解释一下 mysql 的这种行为背后的原因?

最佳答案

SELECT 默认不需要共享行锁。通过使用 multi-version concurrency control (MVCC) architecture,它可以在不锁定的情况下读取行的最新提交版本。 .

你可以写一个SELECT query that explicitly requests a lock , 但如果没有这些锁定子句,SELECT 不需要行锁。

关于mysql - 当另一个事务具有排他锁时,MySQL 如何允许获取共享锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63363191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com