TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT)。NOT NULL 且擁有唯一索引 (通常為 PRIMARY KEY)。UNSIGNED 將正數範圍翻倍。TINYINT UNSIGNED 上限 255)。| 特性 | MyISAM | InnoDB | MEMORY (HEAP) | BDB |
|---|---|---|---|---|
指定初始值 AUTO_INCREMENT=n | ✅ CREATE/ALTER | ❌ (8.0+ 支援 ALTER) | ✅ CREATE/ALTER | ❌ |
| 最大值刪除後是否重用 | ✅ 重用 | ❌ 不重用 | ❌ 不重用 | ✅ 重用 |
| 複合索引實現多序列 | ✅ 支援 | ❌ 不支援 | ❌ 不支援 | ✅ 支援 |
| TRUNCATE TABLE 重置 | ✅ 歸 1 | ✅ 歸 1 | ✅ 歸 1 | ✅ 歸 1 |
CREATE TABLE multi_seq (
grp_id INT NOT NULL,
seq_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
data VARCHAR(20),
PRIMARY KEY (grp_id, seq_id)
) ENGINE=MyISAM;
INSERT INTO multi_seq (grp_id, data) VALUES (1, 'a'), (1, 'b'), (2, 'x');
-- grp_id=1 序列: 1,2 | grp_id=2 序列: 1
INSERT INTO t (col) VALUES ('x');
SELECT LAST_INSERT_ID(); -- 會話級,不受併發影響
DELETE FROM t WHERE 1; -- 強制逐行刪除,保留 AUTO_INCREMENT 計數器
CREATE TABLE seq_pool (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, stub CHAR(1)) ENGINE=MyISAM;
INSERT INTO seq_pool (stub) VALUES ('a');
SELECT LAST_INSERT_ID(); -- 取得全域唯一 ID
CREATE TABLE seq_table (id INT UNSIGNED NOT NULL);
INSERT INTO seq_table VALUES (0);
-- 取號 (步長 1)
UPDATE seq_table SET id = LAST_INSERT_ID(id + 1);
SELECT LAST_INSERT_ID();
-- 步長 10
UPDATE seq_table SET id = LAST_INSERT_ID(id + 10);
SELECT LAST_INSERT_ID();
優點:無鎖、無交易、不阻塞其他操作。
ALTER TABLE t DROP COLUMN id;
ALTER TABLE t ADD COLUMN id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
MySQL 會重新產生連續編號。