我正在創建一個網頁。該網頁根據用戶操作將數據存儲到MySQL數據庫中。數據庫有很多行。該行的主鍵是列的rowID,它只是按順序對行進行編號(例如,1,2,3,4 ....)。用戶可以選擇刪除行。問題是當用戶刪除最後一行以外的行時。 rowID中有一個跳過。例如,如果有5行,則爲1,2,3,4,5,並且用戶刪除第三行。現在rowID列中的數據是1,2,4,5。我想知道MySQL或PHP中是否已有內置函數來有效地進行計算。自動刪除主鍵序列中的空位
我知道擺脫這一點的唯一方法是遍歷行並基本刷新rowID。但是,如果有大量的行,我認爲這將是非常昂貴的時間。
我也想知道如何自動增加rowID,如果有新的行正在創建。目前我有代碼來查找當前最大的rowNumber,並插入當前最大的rowNumber + 1行。
因此,據我所知,解決方案將創建另一列相同的主鍵(但不是主鍵),並更新呢?你也可以詳細說明left_id和right_id解決方案,因爲我不確定我是否理解它。 – 2013-03-12 17:55:40
PK永遠不會改變的是一個*觀點*。但是,SQL支持專門爲這個「問題」級聯,並且沒有什麼本質上可以改變的PK的錯誤 - 當然,爲了按照所描述的維護非間隙序列,改變PK可能存在問題由OP .. – 2013-03-12 17:55:45
從你的例子中,如果第三項被刪除。第一行left_id = 0,right_id = 2 |第二行left_id = 1,right_id = 4 |第四行left_id = 2,right_id = 5 |第五行left_id = 4,right_id = null – mkaatman 2013-03-12 17:56:38