AUTO_INCREMENT 是 MySQL 自動生成唯一標識的核心機制,掌握其查詢與修改技巧對資料遷移、測試資料構建、主鍵衝突解決至關重要。
通過 information_schema 系統表精確獲取:
SELECT AUTO_INCREMENT
FROM information_schema.tables
WHERE table_name = 'your_table_name'
AND table_schema = 'your_database_name';
關鍵點: 建議加上 table_schema 避免同名表干擾。
ALTER TABLE your_table_name AUTO_INCREMENT = new_start_value;
將舊系統資料 (ID 1-10000) 遷移至新表,需新表從 10001 開始:
ALTER TABLE new_table AUTO_INCREMENT = 10001;
-- 先清空表 (保留結構)
TRUNCATE TABLE test_table;
-- TRUNCATE 會自動重置 auto_increment 為 1
分表 1 起始 1000000,分表 2 起始 2000000:
ALTER TABLE shard_1 AUTO_INCREMENT = 1000000;
ALTER TABLE shard_2 AUTO_INCREMENT = 2000000;
INSERT INTO users (name) VALUES ('John');
SELECT LAST_INSERT_ID(); -- 返回剛生成的 ID,連線級別隔離,安全可靠
INSERT INTO users (name) VALUES ('A'), ('B'), ('C');
SELECT LAST_INSERT_ID(); -- 返回第一筆的 ID
-- 連續 ID 可推算:第一筆 ID, 第一筆 ID+1, 第一筆 ID+2...
SELECT table_name, AUTO_INCREMENT
FROM information_schema.tables
WHERE table_schema = 'your_db'
AND AUTO_INCREMENT IS NOT NULL
ORDER BY AUTO_INCREMENT DESC;
| 限制 | 說明 |
|---|---|
| 只能增不能減 | 新值必須 > 當前最大 ID,否則無效 |
| 不影響現有資料 | 僅影響後續 INSERT |
| 需 ALTER 權限 | 需資料表 ALTER 權限 |
| InnoDB 持久化 | 8.0+ 重啟後保留,舊版重啟可能重置 |
ALTER TABLE t AUTO_INCREMENT=5 但表中已有 ID=10,下次插入仍從 11 開始