【发布时间】:2013-06-11 23:39:37
【问题描述】:
在 MySQL 中,如果您的 MyISAM 表类似于:
CREATE TABLE `table1` (
`col1` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`col2` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`col2`, `col1`)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM;
如果您插入行,则自动增量基数对于每个不同的 col2 值都是唯一的。如果我的解释不够清楚,this 答案应该解释得更好。然而,InnoDB 不遵循这种行为。事实上,InnoDB 甚至不允许您将 col2 作为主键定义中的第一个。
我的问题是,是否可以在不使用 MAX(id)+1 之类的方法的情况下以某种方式在 InnoDB 中对这种行为进行建模?我能找到的最接近的是this,但它适用于 PostgreSQL。
编辑:标题拼写错误
【问题讨论】:
-
对于像我一样不知道这个功能的人,the phrasing in the manual 可能更明确:“对于 MyISAM 表,您可以在多列索引的辅助列上指定
AUTO_INCREMENT. 在这种情况下,AUTO_INCREMENT列的生成值计算为MAX(auto_increment_column) + 1 WHERE prefix=given-prefix。 -
作为解决方案,我看不到其他选择,只能按照您提到的帖子中的建议在您的桌子上创建触发器。 MySQL is not that different中的触发器语法。
标签: mysql database-design innodb myisam