【发布时间】:2020-05-13 22:47:08
【问题描述】:
我需要从 innoDB 表中读取一行,在我的代码中进行一些计算,然后(也许)更新该行。我需要对行进行独占访问,这意味着如果 2 个进程同时访问同一行,则一个进程应等待读取该行,直到另一个进程完成更新。
我找到了 2 个可能的解决方案:
SELECT * FROM table WHERE myid=1234 FOR UPDATE;
[CalculateCalculateCalculate]
UPDATE table SET ... WHERE myid=1234;
或
START TRANSACTION;
SELECT * FROM table WHERE myid=1234;
[CalculateCalculateCalculate]
UPDATE table SET ... WHERE myid=1234;
COMMIT;
我不确定更喜欢哪一个。看来,两者都在做同样的事情,这是真的吗?一种解决方案会比另一种更快吗?
【问题讨论】:
标签: mysql transactions sql-update innodb