CREATE TABLE table_1 (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(5) NOT NULL
) AUTO_INCREMENT = 100; -- 從 100 開始
ALTER TABLE users AUTO_INCREMENT = 10000; -- 類似 QQ 號從 10000 起
-- 假設最大現有 ID = 123455,希望下一條從 123456 開始
ALTER TABLE users AUTO_INCREMENT = 123456;
單機 MySQL 有效;MySQL Cluster (NDB) 環境下無效,因自增機制不同,需特殊處理。
create_table :articles, options: 'AUTO_INCREMENT = 1001' do |t|
# columns...
end
TRUNCATE TABLE table1; -- 刪除所有數據並重置 AUTO_INCREMENT=1
DELETE FROM table1不重置自增值,TRUNCATE會重置。生產環境謹慎使用 TRUNCATE(隱式提交、不可回滾、觸發器不觸發)。
-- 8.0 將自增值持久化到 redo log,重啟不丟失
SHOW VARIABLES LIKE 'innodb_autoinc_lock_mode';
-- 建議保持默認 2 (interleaved),高併發下性能最佳
| 問題 | 原因/解決 |
|---|---|
| ALTER TABLE AUTO_INCREMENT=N 不生效 | N ≤ 當前最大 ID+1 時無效;需 N > 現有最大 ID |
| 自增 ID 跳號 | 事務回滾、REPLACE INTO、INSERT IGNORE 失敗、批量插入預分配 |
| 自增 ID 耗盡 (BIGINT 上限 2^63-1) | 極罕見,可重構為 UUID/雪花算法 ID |
| 主主同步自增衝突 | 設定 auto_increment_increment=2, offset=1/2 錯開 |