這是我的設置: 包含30分鐘時間段(整個半小時)的MySQL數據庫中的表格 顯示一段時間表的網站數量客房可在每個時段預訂。 最少預訂一小時所以每個預訂保留兩個插槽至少當預留的插槽他們變得不可用之前(不能預訂30分鐘一個房間)關於PHP/MySQL事務的澄清以及SELECT FOR UPDATE
我的問題是這樣的: 我使用PDO交易在PHP腳本通過更改其狀態(兩列枚舉類型)爲預訂預留多個插槽。因此,如果讓我們說兩個或兩個以上的客戶嘗試在同一時間段或者之前預訂一個房間,那麼如果我使用SELECT FOR UPDATE會發生什麼情況?第一個是否繼續該過程,其他人是否被拒絕(通過錯誤或空集)還是其他人在第一個完成後等待,並在其預訂或回滾的情況下提交數據庫中的更改他改變了主意,然後第二快的客戶試圖選擇行並更新它們,取決於第一行的行爲?
基本上我想知道是否必須實施某種重試系統。
此外,我很好奇,什麼時候該臨時鎖刪除;只有在事務提交時(包括mysql,auto-commit off)或影響select語句中某些/所有行的下一次更新時才提交事務?
你看了這個問題嗎?他問,當第二個用戶試圖運行腳本時,如果第一個用戶鎖定表,他們會發生什麼情況:他們是否收到錯誤,或者他們是否等待表被解鎖。 – Barmar
是的,我的第一個想法是鎖定表格進行編輯,但它是一個大表格,我不想鎖定每個人的表格,只是針對相關的行,這就是爲什麼我認爲選擇更新。另外,如果我使用你的方法,我應該在提交之前使用解鎖。此外,爲什麼這有利於pdo的交易。我認爲你可以使用pdo事務,也可以鎖定,只有你在提交或回滾後使用解鎖,我認爲 –
好吧,所以這只是我的答案,不夠準確(我讀過的課程的問題)... – artragis