自增主鍵經 DELETE 產生斷號,若業務需連續編號,可用結構重建或邏輯刪除兩種方式處理。
-- 1. 刪除原主鍵
ALTER TABLE `table_name` DROP `id`;
-- 2. 新增欄位(置於首欄)
ALTER TABLE `table_name` ADD `id` MEDIUMINT(8) NOT NULL FIRST;
-- 3. 設為自增主鍵
ALTER TABLE `table_name` MODIFY COLUMN `id` MEDIUMINT(8) NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
AUTO_INCREMENT 會從 1 重新編號-- 表結構加欄位
ALTER TABLE `table_name` ADD `is_deleted` TINYINT NOT NULL DEFAULT 0;
-- 刪除操作改為更新
UPDATE `table_name` SET `is_deleted` = 1 WHERE `id` = 123;
-- 查詢自動過濾
SELECT * FROM `table_name` WHERE `is_deleted` = 0;
is_deleted = 0,建議建立 VIEW 封裝| 維度 | 重建自增 | 邏輯刪除 |
|---|---|---|
| ID 連續性 | ✅ 完全連續 | ❌ 保留斷號 |
| 外鍵影響 | ⚠️ 需重建 FK | ✅ 無影響 |
| 鎖表時間 | 長(大表分鐘級) | 極短 |
| 歷史追蹤 | ❌ 丟失 | ✅ 完整保留 |
| 適用場景 | 小表、無外鍵、需連續編號 | 大表、有關聯、需審計 |
-- 僅重置下一個自增值(不重新編號現有行)
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
配合 DELETE 清空表後使用,可讓新資料從 1 開始。
根據業務對「連續性」與「關聯完整性」的權衡選擇方案,邏輯刪除通常是更安全的長期策略。