虽然这对 InnoDB 没有帮助,但值得指出的是 MyISAM 本身就支持此功能。如使用AUTO_INCREMENT
中所述:
MyISAM 笔记
对于MyISAM
表,您可以AUTO_INCREMENT
在多列索引中的辅助列上指定。在这种情况下,AUTO_INCREMENT
列的生成值计算为。当您要将数据放入有序组时,这很有用。MAX(auto_increment_column) + 1 WHERE prefix=given-prefix
创建表动物(
grp ENUM('fish','mammal','bird') NOT NULL,
id MEDIUMINT NOT NULL AUTO_INCREMENT,
名称 CHAR(30) 非空,
主键 (grp,id)
) 引擎=MyISAM;
插入动物 (grp,name) 值
('哺乳动物','狗'),('哺乳动物','猫'),
('鸟','企鹅'),('鱼','松懈'),('哺乳动物','鲸鱼'),
('鸟','鸵鸟');
SELECT * FROM 动物 ORDER BY grp,id;
返回:
+--------+----+---------+
| grp | 编号 | 姓名 |
+--------+----+---------+
| 鱼| 高分辨率照片| CLIPARTO 1 | 松懈|
| 哺乳动物| 高分辨率照片| CLIPARTO 1 | 狗 |
| 哺乳动物| 高分辨率照片| CLIPARTO 2 | 猫 |
| 哺乳动物| 高分辨率照片| CLIPARTO 3 | 鲸鱼|
| 鸟| 高分辨率照片| CLIPARTO 1 | 企鹅 |
| 鸟| 高分辨率照片| CLIPARTO 2 | 鸵鸟|
+--------+----+---------+
在这种情况下(当AUTO_INCREMENT
列是多列索引的一部分时),AUTO_INCREMENT
如果您删除任何组中具有最大值的行,则会重用AUTO_INCREMENT
值。即使对于通常不重用值的MyISAM
表也会发生这种情况。AUTO_INCREMENT