測試資料清理、專案初始化時,常需將 AUTO_INCREMENT 計數器重置為 1。本文介紹兩種標準方法,並說明適用場景與注意事項。
TRUNCATE TABLE `table_name`;
WHERE 條件,無法保留部分資料。DELETE)。-- 先清空資料 (可選,視需求)
DELETE FROM `table_name`;
-- 重置自增起始值
ALTER TABLE `table_name` AUTO_INCREMENT = 1;
AUTO_INCREMENT = 10000),避免與現有 ID 衝突。AUTO_INCREMENT 值不得小於現有最大 ID + 1,否則插入會報 Duplicate entry 錯誤。| 場景 | 推薦方法 | 原因 |
|---|---|---|
| 測試環境完全重置、不需保留資料 | TRUNCATE TABLE | 最快、最徹底、自動重置 |
| 生產環境保留資料、僅調整下一個 ID | ALTER TABLE AUTO_INCREMENT | 不影響現有資料、靈活指定起始值 |
| 大量刪除後想壓縮 ID 空間 | ALTER TABLE (配合重建表) | 單純 ALTER 不會重排現有 ID,需重建表才能真正壓縮 |
| 有外鍵關聯的表 | DELETE + ALTER | TRUNCATE 會因 FK 失敗 |
原文提到的 DBCC CHECKIDENT 為 SQL Server 指令,MySQL 不支援。MySQL 只用上述兩種方式。
$sql = "DELETE FROM `$table_vote`";
mysql_query($sql, $link);
$sql = "ALTER TABLE `$table_vote` AUTO_INCREMENT = 1";
mysql_query($sql, $link);
現代最佳實踐:請使用PDO或mysqli預處理語句,避免 SQL 注入;mysql_*函數已棄用移除。
SHOW TABLE STATUS LIKE 'table_name',欄位 Auto_increment。依據「是否保留資料」、「是否有外鍵」、「是否需指定起始值」選擇 TRUNCATE 或 ALTER TABLE,並記得備份生產資料再操作。