[英]Question on locking and transactions on MyISAM table
我的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 TRANSACTION
和COMMIT
什么也不做。
您可以使用LOCK TABLES :
LOCK TABLES mytable READ;
...
UNLOCK TABLES;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.