例如,在我的系統中,我允許用戶創建一個列表並在列表中添加一些信息,例如。姓名,地址,電話......如何處理數據併發?
及後創建列表,它會被插入到數據庫中,並在頁面管理員可以刪除列表
當用戶編輯列表中的問題是,管理員刪除名單,那麼會發生什麼?
唯一的方法是在編輯提交到數據庫之前再次檢查數據庫。但是,如果有很多表單,很多輸入,我如何檢查每個字段,如果我必須檢查每個字段是併發的,那麼有很多工作。
我使用的PHP,MySQL和PDO查詢
謝謝
例如,在我的系統中,我允許用戶創建一個列表並在列表中添加一些信息,例如。姓名,地址,電話......如何處理數據併發?
及後創建列表,它會被插入到數據庫中,並在頁面管理員可以刪除列表
當用戶編輯列表中的問題是,管理員刪除名單,那麼會發生什麼?
唯一的方法是在編輯提交到數據庫之前再次檢查數據庫。但是,如果有很多表單,很多輸入,我如何檢查每個字段,如果我必須檢查每個字段是併發的,那麼有很多工作。
我使用的PHP,MySQL和PDO查詢
謝謝
那麼你爲什麼不只是檢查是否使用它的主鍵(id)在相應的表中存在的行?
基本上,你無法避免這種情況。用戶編輯表單時,用戶無法確定表單是否已被刪除。
一種解決方案是,一旦用戶開始編輯記錄,應該阻止任何人同時編輯/同時刪除記錄。用戶提交表單後,該標誌應該回到原始值,以便其他用戶/管理員可以編輯/刪除這些記錄。
如果記錄仍然存在,還有第二種解決方案是通過ajax不時地在用戶頁面中使用服務並進行檢查,但是如果有很多輸入,實現起來可能有點麻煩。
基本上,你需要創建類似於事務的東西,又名。鎖定正在編輯的記錄。要非常小心,因爲你可以結束很多鎖定的記錄。您需要實現用戶需要確定「交易」的時間。如果超出此時間的鎖定記錄,請自動解鎖。同時要注意,用戶可能會超過這個時間,並且你也需要處理這種情況,因爲你將最終處於與原始問題相同的狀態。 PS:還需要注意在用戶編輯過程中編輯過的信息,因爲這些信息將會丟失。對於編輯部分,我想我會採用哈希方法檢查狀態編輯之前的編輯狀態。從這一點開始,由您決定要做什麼。
國旗在數據庫中?在任何修改之前設置爲1? – 2012-03-31 02:11:31
感謝您的編輯 – 2012-03-30 14:19:18
什麼是「列表」。一組行?一行有一些字段?是否有其他表格「定義」列表中的有效值?如何「編輯」列表 - 是否將它加載到內存中,修改它並將其保存在單個事務中,還是將加載和保存分離到單獨的事務中?你是否刪除/插入或者是否更新了被修改的數據? – 2012-03-31 12:50:39