2011-03-21 46 views
1

我在我的MySQL DB中有一個表,它基本上包含「cron」類任務。基本上用戶訪問一個頁面,腳本(php)檢查數據庫cron表,獲取最新的5個「可用」結果並執行與任務相關的腳本。如何確保MySQL選擇不會干擾?

我現在預見的問題是2個用戶可能會得到相同的任務。請注意,目前我首先運行一個UPDATE查詢,它將5個任務分配給當前用戶。之後,我執行一個SELECT查詢以獲得分配給當前用戶的5個任務,當他完成後,我將任務標記爲已完成。

理論上沒有2個用戶應該得到相同的任務,但我不確定。我很簡單地想知道,如果MySQL可能有一個構建機制來確保這一點,或者是否有已知的方法?

謝謝。

回答

1

您想使用Transactions。通過這種方式,您可以確保多步操作(如[UPDATE,SELECT,UPDATE])完全完成,或根本不會發生。

這是一個經典的concurrency問題,值得關於併發和事務的一般性閱讀,以便您瞭解主體。這將幫助您避免線下問題(併發中存在許多棘手的問題!)。

+0

謝謝,我已經閱讀了交易記錄,並且據我所知,這隻能防止數據被提交,除非所有查詢都已完成。我不明白這是如何防止其他用戶接收到相同的數據庫結果?沒有辦法確定是否有其他用戶正在使用相同的結果。 – Naatan 2011-03-21 14:45:08

+1

Hello Naatan,閱讀關於表鎖的mysql手冊,它可能會幫助你 – julioc 2011-03-21 15:14:23

+1

如果有未提交的更改,數據庫將鎖定受影響的行或表。該鎖將阻止對這些對象的進一步讀取和寫入,直到提交更改。 – 2011-03-21 15:16:23