我有一個使用jQuery/php/mysql構建的webapp。這是一種任務管理器。我有屬於類別的類別和任務。任務有一個代理主鍵(Autoincrement id)和數據庫一致性我有一個像這樣的自然鍵(唯一):(id_category,position)
當用戶移動任務時,我必須更新位置(ajax請求)這個任務在數據庫中的位置,但也包括所有其他改變所關心的任務的位置。例如,如果您向上移動位置5到位置2的給定任務,位置從4到2的任務必須將其位置增加1。 (這是我的方法;我知道有些人發送給定類別的全部任務與新的職位,但我試圖只更新那些需要的)
問題是我不知道如何在不避免重複錯誤的情況下更新任務的位置,因爲我無法/不知道如何在同一時間更新所有內容。
所以你可以幫助我,或者我應該改變我的方法。我可以刪除唯一索引(自然鍵),但數據庫一致性機制是有一些東西...
謝謝你的任何幫助。
爲什麼當你擁有autoinc鍵時你需要你的自然鍵?它的用途是什麼? – 2012-03-28 18:54:46
在你的例子中,你可以這樣做:'UPDATE table SET position = -1 WHERE position = 5; UPDATE表SET位置=位置+ 1 WHERE位置<5 AND位置> 1; UPDATE表SET位置= 2 WHERE位置= -1'(假設-1是永遠不會使用的位置) – NullUserException 2012-03-28 18:55:08
@TobyAllen用於數據庫一致性。兩個任務不能在同一個類別中處於相同位置。當我構建應用程序時,發生了一些情況,因爲我沒有檢查某些條件。 – Amida 2012-03-28 18:58:25