表中有 ID 列(主鍵),刪除中間行後希望 ID 自動縮進保持 1,2,3,4... 連續自然數。
主鍵的唯一作用是唯一標識行,不承擔業務語義(如順序號)。 強行重排 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;
應用層也可以在遍歷結果集時維護計數器顯示序號。永遠不要修改主鍵值。