【发布时间】:2011-02-22 18:30:46
【问题描述】:
我正在尝试使用 MySQL 行锁定来基本上在一行上模拟 MuteEx。假设我的表有 2 列,一个 id 和一个文本字段,以及三个条目 (1,a) (2,b) 和 (3,c)。 选择 * FROM 表;将返回这些结果。 我可以按正常方式锁定特定行。
START TRANSACTION;
BEGIN;
SELECT * FROM table WHERE id = '2' FOR UPDATE;
但是,如果从第二个连接我要从表中选择 *。它将返回所有 3 个结果。有没有办法让行级锁定基本上防止任何 SELECT 看到/使用被锁定的行?基本上,我试图阻止任何人使用当前正在使用/操作的行,甚至将行视为其数据(因为它正在被使用/操作)在 SELECT 时不能被信任是准确的.
【问题讨论】:
-
可能不是你(或我)想听到的,但看起来如果第二个选择器也使用
SELECT ... FOR UPDATE,它会等到初始锁定被释放。