gpt4 book ai didi

mysql - 关于 MyISAM 表上的锁定和事务的问题

转载 作者:搜寻专家 更新时间:2023-10-30 21:54:50 26 4
gpt4 key购买 nike

我在 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 从一个表中选择所有记录 - 它会选择所有记录,即使锁定仍应保持。

所以我好像有点不明白。请解释这种行为。

最佳答案

MyISAM 表不支持事务 - START TRANSACTIONCOMMIT 什么都不做。

您可以使用 LOCK TABLES :

LOCK TABLES mytable READ;
...
UNLOCK TABLES;

关于mysql - 关于 MyISAM 表上的锁定和事务的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1693400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com