nig*_*der 1 mysql database locking transactions
我在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;
Run Code Online (Sandbox Code Playgroud)
据我所知,在MyISAM中,整个表应该被锁定,直到交易结束.当我从PHP启动并发查询,在浏览器中打开脚本时,它确实等待锁定消失.但是,如果我使用mysql.exe从表中选择所有记录 - 即使仍然保持锁定,它也会选择所有记录.
所以我似乎不明白.请解释一下这种行为.
MyISAM表不支持事务 - START TRANSACTION并且COMMIT什么也不做.
您可以使用LOCK TABLES:
LOCK TABLES mytable READ;
...
UNLOCK TABLES;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2432 次 |
| 最近记录: |