自增主鍵達上限、測試需重置、遷移合併需對齊 ID 等場景,需查詢當前值與手動調整。標準方法僅需兩條 SQL。
SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'db_name' AND TABLE_NAME = 'table_name';
回傳下一個將分配的值 (即當前最大 ID + 1,或手動設定後的值)。
ALTER TABLE table_name AUTO_INCREMENT = 10000;
規則:
innodb_autoinc_lock_mode=2 配合。-- 分片 1 ALTER TABLE shard_1.users AUTO_INCREMENT = 1000000000; -- 分片 2 ALTER TABLE shard_2.users AUTO_INCREMENT = 2000000000;
TRUNCATE TABLE test_table; -- 重置自增計數器為 1 (同時清空資料) -- 或保留資料但重置 (需無資料或最大 ID < 新值) DELETE FROM test_table; ALTER TABLE test_table AUTO_INCREMENT = 1;
-- Master 1 (奇數) SET @@auto_increment_increment = 2; SET @@auto_increment_offset = 1; -- Master 2 (偶數) SET @@auto_increment_increment = 2; SET @@auto_increment_offset = 2;
SELECT
TABLE_SCHEMA, TABLE_NAME,
AUTO_INCREMENT,
CASE
WHEN DATA_TYPE LIKE 'tinyint%' THEN 255
WHEN DATA_TYPE LIKE 'smallint%' THEN 65535
WHEN DATA_TYPE LIKE 'mediumint%' THEN 16777215
WHEN DATA_TYPE LIKE 'int%' THEN 4294967295
WHEN DATA_TYPE LIKE 'bigint%' THEN 18446744073709551615
END AS MAX_VALUE,
ROUND(AUTO_INCREMENT /
CASE
WHEN DATA_TYPE LIKE 'tinyint%' THEN 255
WHEN DATA_TYPE LIKE 'smallint%' THEN 65535
WHEN DATA_TYPE LIKE 'mediumint%' THEN 16777215
WHEN DATA_TYPE LIKE 'int%' THEN 4294967295
WHEN DATA_TYPE LIKE 'bigint%' THEN 18446744073709551615
END * 100, 2) AS USAGE_PCT
FROM information_schema.TABLES t
JOIN information_schema.COLUMNS c
ON t.TABLE_SCHEMA = c.TABLE_SCHEMA
AND t.TABLE_NAME = c.TABLE_NAME
AND c.COLUMN_KEY = 'PRI'
AND c.EXTRA = 'auto_increment'
WHERE t.AUTO_INCREMENT IS NOT NULL
AND t.TABLE_SCHEMA NOT IN ('mysql','information_schema','performance_schema','sys')
HAVING USAGE_PCT > 80
ORDER BY USAGE_PCT DESC;
| 變數 | 說明 |
|---|---|
auto_increment_increment | 遞增步長 (預設 1,雙主設 2) |
auto_increment_offset | 起始偏移 (預設 1,雙主設 1/2) |
innodb_autoinc_lock_mode | 0=傳統鎖, 1=連續(預設), 2=交錯(高併發) |