首页  >  文章  >  数据库  >  MySQL InnoDB 可以实现非主键自增吗?

MySQL InnoDB 可以实现非主键自增吗?

DDD
DDD原创
2024-11-01 17:16:301004浏览

Can I Auto-Increment a Non-Primary Key in MySQL InnoDB?

MySQL InnoDB:自动递增非主键

在 MySQL InnoDB 中,可以自动递增非主键列,但这样做一般不会推荐。

问题:

是否可以自动递增非主键,特别是 book_comments 表中的 comment_id 列?

替代方案:

提问者建议两个使用自动递增非主键的替代方案:

  • 将 comment_id 设为主键,并通过(book_id、时间戳、user_id)上的唯一索引强制完整性
  • 保留现有的主键并将 comment_id 替换为 book_comments_votes 中的整个主键table

但是,这些替代方案都有缺点,例如增加不必要的索引开销或显着增加表大小。

答案:

是的,可以通过在该列上创建索引来自动递增非主键。以下示例创建一个带有自动递增 testInc 列的表:

<code class="sql">CREATE TABLE `test` (
  `testID` int(11) NOT NULL,
  `string` varchar(45) DEFAULT NULL,
  `testInc` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`testID`),
  KEY `testInc` (`testInc`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;</code>

但是,专家强烈建议不要这种做法。更合适的方法是将 comment_id 作为主键,并通过 (book_id、timestamp、user_id) 上的唯一索引来强制完整性。这种方法为表提供了合适的主键,并遵循最小惊讶原则。

以上是MySQL InnoDB 可以实现非主键自增吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn