【发布时间】:2023-12-26 18:43:01
【问题描述】:
我在 myisam 表中有一个计数器字段。要在多任务环境(Web 服务器、来自 PHP 的并发查询)中更新计数器值,我需要锁定记录以进行更新。 所以我这样做:
START TRANSACTION;
SELECT Counter FROM mytable ... FOR UPDATE;
UPDATE Counter value or INSERT INTO mytable;
// let's make sleep for 20 seconds here to make transaction longer
COMMIT;
据我了解,在 MyISAM 中,整个表应该被锁定直到事务结束。 当我从 PHP 启动并发查询,在浏览器中打开脚本时,它真的会等到锁消失。 但是,如果我使用 mysql.exe 从表中选择所有记录-即使仍应保持锁定,它也会选择所有记录。
所以我似乎有些不明白。请解释一下这种行为。
【问题讨论】:
标签: mysql database transactions locking