簡體   English   中英

關於MyISAM表上的鎖定和事務的問題

[英]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 TRANSACTIONCOMMIT什么也不做。

您可以使用LOCK TABLES

LOCK TABLES mytable READ;
...
UNLOCK TABLES;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM