我很好奇PHP腳本和MySQL的行爲? 該腳本基本上是兩個SQL查詢。PHP腳本在多次同時訪問MySQL數據庫時會發生什麼?
第一個SELECT並從某個id決定的特定行的列中獲取一個數字。
然後,如果數字是正數,則第二次通過減去一定數量更新列。
很顯然,這是一個經典的案例,我會使用事務或鎖或互斥或什麼。
我的問題是這樣的: 在一個網站它是兩個或兩個以上的用戶完全可以調用腳本在同一時間同一行。如果你不使用事務或鎖表,PHP將如何處理這個問題?它們是兩個查詢/函數調用,但它們在一個腳本中。它是否等待整個腳本返回給它的相應用戶再次爲另一個用戶運行它,或者因爲它們是不同的查詢,因爲它可能運行第一個查詢在多個用戶調用相同的腳本,然後第二個查詢另一個集。
基本上我問,因爲我正在做一些事情,我沒有足夠的權限來使用事務或鎖,我想知道我是否可以避免一個互斥體(我不知道這個詞,基本上是一個新的調用者表;在調用上面的腳本之前,我將調用一個新的腳本,在此之前,我將把表的布爾列變爲true,以便寫入,以便其他人在原始腳本完成時不能進行,然後將bacl設置爲false,以便下一行可以做等)
編輯: 我不確定選擇更新是否包含在上面提到的權限。負責回答我的問題的人很難找到,我已經與我一起尋找他...
是的,剛剛得到了一個響應,我可以鎖表...所以你是對的。至於P.S,實際上是我在做什麼;在列上使用引用(free = free - {$ diff}) – 2013-02-22 13:30:00
所以現在我知道我可以使用SELECT ... FOR UPDATE。你知道這是如何工作的。我理解它的方式是鎖定select(select)和write(update)兩個結果行(來自select查詢),但我不確定它何時釋放它們......在這些行上進行下一次更新後? – 2013-02-22 13:32:23
SELECT ... FOR UPDATE只在交易中工作。它將鎖定行直到事務結束。 – sectus 2013-02-22 14:01:54