2013-04-24 57 views
0

我有一個應用程序:PHP(或者MySQL的)鎖

  • 調用服務器上的PHP腳本。
  • 如果該行中的某個值設置爲false,PHP腳本會發出一個MySQL請求,該請求返回MySQL表中的一行。
  • PHP腳本修改行並將值設置爲true。

但是,我想在多處理器服務器,腳本可以假設在兩個核心上併發執行;因此,嘗試訪問表中同一行的兩個腳本都可能存在問題,即使它理想情況下只適用於其中一個腳本。

我想我的問題是,有什麼辦法可以在特定的行上創建一個鎖,以便它一次只能由一個PHP腳本實例訪問?謝謝!

+2

我很難把一個非問題的併發讀*操作記錄下來。即使是併發寫入,如今(至少在mySQL的環境中),幾乎不在「擔心」的範圍內,除非您正在同時處理許多*數千個操作。接受我的建議,不要爲此失眠[或者寫任何代碼]。 – Sammitch 2013-04-24 15:04:44

回答

0

只需使用交易。

BEGIN WORK; 
...sql statements... 
COMMIT; 

如果您正在使用的MyISAM您可以使用LOCK TABLES,但它是低效的,因爲鎖定整個表,而不只是一組行。