2011-02-13 48 views
2

我必須根據每行有超過7000萬行的表進行一些網絡IO操作。由於需要高TPS,我已經創建了一個php腳本,它可以爲表中的單個行執行此任務。我打算每秒使用約40次cron作業調用這個php腳本。我如何做到這一點,以便沒有兩個腳本訪問同一行。mysql中的行鎖定

+0

沒有鎖定,但通過使用獨特的範圍...沒有更具體的信息,我懷疑你會得到一個更具體答案... – 2011-02-13 06:22:30

回答

3

要做到這一點純粹基於表,你需要設置東西在表中 - 一個布爾值,時間戳,刪除行等 - 這表明你已經處理了該行。之後,交易就是你所需要的。

START TRANSACTION; 
SELECT * FROM table WHERE processing = 0 ORDER BY id ASC LIMIT 1 FOR UPDATE; 
UPDATE table SET processing = 1 WHERE id = $id_of_what_we_got; 
COMMIT; 
-- process row here 
-- optionally, tell the db we're done 
UPDATE table SET processing = 2 WHERE id = $id_of_what_we_got; 

只要確保爲整個事務使用相同的MySQL連接(PHP資源)。

延伸閱讀: