解決自動增量欄位中的差距
自動增量欄位的目的只是為了唯一標識資料庫中的記錄。雖然填補已刪除記錄所造成的空白似乎是可取的,但這樣做通常被認為是不好的資料庫實踐。
空白填充策略中的缺陷
嘗試填補空白可能會導致:
-
有缺陷的資料庫設計: 暗示自動增量ID 具有超出其用作記錄標識符之外的特定相關性。
-
資料操作錯誤: 無意更改資料或引入不一致。
替代方案注意事項
不要填充間隙,請考慮以下替代方案:
-
保留未來的間隙:在ID 序列末端附加足夠大的間隙以適應未來可能的刪除。
-
記錄間隙: 提供解釋間隙意義的文件(如果有)。
-
避免不必要的刪除: 如果可能,避免從具有自動增量欄位的表中刪除記錄。
強制MySQL 中的間隙填充(進階)
如果絕對必要,填補MySQL 中的空白需要進階流程:
-
建立臨時表: CREATE TEMPORARY TABLE NewIDs( NewID INT 無符號自動增量,OldID INT UNSIGNED)。
-
填入臨時表: INSERT INTO NewIDs (OldId) SELECT Id FROM OldTable ORDER BY Id ASC。
-
更新父表與子表: 更新父項、子項、NewIds SET Parent.ParentId = NewIds.Id, Child.ParentId = NewIds.Id WHERE Parent.ParentId = NewIds.ParentId AND Child.ParentId = NewIds.ParentId.
-
重新啟用外鍵檢查: SETforeign_key_checks = 1.
-
刪除暫時的table: DROP TABLE NewIds。
但是,由於其固有的風險,強烈建議在考慮此方法時謹慎行事。
以上是您應該填補自動增量欄位中的空白嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!