自增列初始 1,插入→ID=2,刪除該行,再插入 ID 為 3(不重用 2)。若 `TRUNCATE TABLE` 則重置為 1。
InnoDB 自增計數器僅**單調遞增**,不回收間隙(為性能與複製一致性)。`TRUNCATE` 會重建表,重置計數器。
CREATE PROCEDURE ReorderAutoInc(IN tbl CHAR(64), IN pk CHAR(64))
BEGIN
SET @s = CONCAT('ALTER TABLE `', tbl, '` DROP `', pk, '`;');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @s = CONCAT('ALTER TABLE `', tbl, '` ADD `', pk, '` INT UNSIGNED NOT NULL FIRST;');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET @s = CONCAT('ALTER TABLE `', tbl, '` MODIFY `', pk, '` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY;');
PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt;
END