gpt4 book ai didi

mysql - 独占锁(行级)——MySql需要一个例子

转载 作者:行者123 更新时间:2023-12-02 00:40:50 26 4
gpt4 key购买 nike

我想锁定 MySQL (InnoDB) 中的特定行,以便其他连接无法读取该特定行。

start transaction;
Select apples from fruit where apples = 'golden';
commit;

现在我要申请独占锁

独占锁一种防止任何其他事务锁定同一行的锁。

https://dev.mysql.com/doc/refman/5.5/en/innodb-locking.html#innodb-shared-exclusive-locks

我假设,应用了锁,然后第二个连接试图访问同一行,必须等到第一个连接通过“提交”释放锁;

我的问题是,如何调整我的 SQL 语句以应用该锁定?还是这会在开始交易时自动发生?

我一直在努力寻找一个很好的例子,但没有找到。

最佳答案

START TRANSACTION;
Select apples
from fruit
where apples = 'golden'
FOR UPDATE;
...
COMMIT;

SELECT ... FOR UPDATE 语句首先锁定该行,然后将其返回给您。

任何其他试图同时对同一行执行相同操作的人都会等待您的COMMITROLLBACK 然后他们将收到该行...您所做的任何更改。

如果您无意更改行,只是想确保没有其他人可以这样做,那么您可以SELECT ... LOCK IN SHARE MODE

请注意,无论哪种方式,它在技术上都不是“行”,它实际上是被锁定的索引记录,但在 InnoDB 中,“一切都是索引”(即使是根本没有索引的表实际上仍然有一个索引,由系统自动创建)所以最终结果是一样的。

关于mysql - 独占锁(行级)——MySql需要一个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46812431/

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