首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL:為什麼不建議在刪除記錄後重排 ID 保持連續?

     編輯:程式設計綜合問答

問題場景

表中有 ID 列(主鍵),刪除中間行後希望 ID 自動縮進保持 1,2,3,4... 連續自然數。

直接回答:不需要、不推薦、有害

主鍵的唯一作用是唯一標識行,不承擔業務語義(如順序號)。 強行重排 ID 會帶來嚴重問題:

  • 性能災難: 刪除一行導致後續所有行主鍵更新,觸發聚簇索引重建、二級索引更新、外鍵級聯修改,鎖表時間不可控。
  • 數據一致性風險: 其他表通過外鍵引用該 ID,重排會破壞關聯,除非級聯更新(更慢)。
  • 業務邏輯錯亂: 日誌、審計、緩存、API 返回中已存儲的舊 ID 失效。

正確做法:查詢時動態生成序號

使用窗口函數(MySQL 8.0+)或變量模擬(舊版本)在 SELECT 時生成顯示用的連續編號:

-- MySQL 8.0+ 標準寫法
SELECT 
    ROW_NUMBER() OVER (ORDER BY create_time) AS display_no,
    id, 
    business_data
FROM your_table
WHERE condition
ORDER BY create_time;

應用層也可以在遍歷結果集時維護計數器顯示序號。永遠不要修改主鍵值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved