更新记录或插入不存在的记录,并加锁

问题描述 投票:0回答:1

我想更新一条记录(如果存在)。这是最简单的部分,但该记录可能不存在,所以让我们先创建它。伪代码:

UPDATE x SET y=1 WHERE id=5

如果结果是0,那么...

a, LOCK TABLE x
b, INSERT INTO...
c, UNLOCK TABLE x

但是我找不到具体的教程。我认为如果锁定成功,步骤 A 必须为“true”,如果已经锁定,则步骤 A 必须为“false”。但在同时运行的情况下,它总是正确的。

(Ps:我知道有replace into之类的操作,但这正是我所需要的)

mysql concurrency locking innodb
1个回答
0
投票

如果你真的想锁定,你必须将

UPDATE
INSERT
都放在锁定区域内。

LOCK TABLE x;
UPDATE x SET y = 1 WHERE id = 5;
IF FOUND_ROWS() = 0 
THEN
    INSERT INTO x (id, y) VALUES (5, 1);
END IF
UNLOCK TABLE x;
© www.soinside.com 2019 - 2024. All rights reserved.