我有一個應用程序:PHP(或者MySQL的)鎖
- 調用服務器上的PHP腳本。
- 如果該行中的某個值設置爲false,PHP腳本會發出一個MySQL請求,該請求返回MySQL表中的一行。
- PHP腳本修改行並將值設置爲true。
但是,我想在多處理器服務器,腳本可以假設在兩個核心上併發執行;因此,嘗試訪問表中同一行的兩個腳本都可能存在問題,即使它理想情況下只適用於其中一個腳本。
我想我的問題是,有什麼辦法可以在特定的行上創建一個鎖,以便它一次只能由一個PHP腳本實例訪問?謝謝!
我有一個應用程序:PHP(或者MySQL的)鎖
但是,我想在多處理器服務器,腳本可以假設在兩個核心上併發執行;因此,嘗試訪問表中同一行的兩個腳本都可能存在問題,即使它理想情況下只適用於其中一個腳本。
我想我的問題是,有什麼辦法可以在特定的行上創建一個鎖,以便它一次只能由一個PHP腳本實例訪問?謝謝!
的MySQL的默認行爲可能足以解決你的問題: http://dev.mysql.com/doc/refman/5.0/en/internal-locking.html
只需使用交易。
BEGIN WORK;
...sql statements...
COMMIT;
如果您正在使用的MyISAM您可以使用LOCK TABLES
,但它是低效的,因爲鎖定整個表,而不只是一組行。
我很難把一個非問題的併發讀*操作記錄下來。即使是併發寫入,如今(至少在mySQL的環境中),幾乎不在「擔心」的範圍內,除非您正在同時處理許多*數千個操作。接受我的建議,不要爲此失眠[或者寫任何代碼]。 – Sammitch 2013-04-24 15:04:44