我不确定行级锁是如何工作的,但这是我的问题。我有一个表 T(id int,balance int)(engine = InnoDB),我想锁定 ID = 1 的行,所以我像这样开始了一个事务:
start transaction ;
select * from T where ID = 1 FOR UPDATE ;
在提交之前,我想尝试一下是否真的锁定了行。所以我启动了另一个会话并输入了以下内容:
UPDATE T set balance = balance + 100 where ID = 1 ;
我清楚地看到我在等待锁定(30秒后超时)。
但是当我键入:
UPDATE T set balance = balance + 8500 where ID = 2 ;
我也在等待锁定,那么如何只锁定ID = 1的行而不是整个表呢?
ID
列上有索引吗? - Barmar