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

MySQL InnoDB 可以自动递增非主键吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-03 04:23:03292浏览

Can You Auto-Increment Non-Primary Keys in MySQL InnoDB?

MySQL InnoDB:自动递增非主键

在 MySQL 的 InnoDB 存储引擎中,主键通常是自动递增的。但是,也可以自动递增非主键。

问题陈述

数据库模式包括两个表:“book_comments”和“book_comments_votes”。 “book_comments”表有一个非主键列“comment_id”,需要自动递增以与“book_comments_votes”表保持一致,其中包含对“comment_id”的引用作为其主键。

解决方案

要自动递增非主键,必须将其声明为索引。这是一个示例:

<code class="mysql">CREATE TABLE `book_comments` (
  `book_id` MEDIUMINT NOT NULL,
  `timestamp` MEDIUMINT NOT NULL,
  `user_id` MEDIUMINT NOT NULL,
  `vote_up` SMALLINT,
  `vote_down` SMALLINT,
  `comment` TEXT,
  `comment_id` MEDIUMINT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`book_id`, `timestamp`, `user_id`),
  KEY `comment_id` (`comment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;</code>

替代方案和讨论

虽然在非主键上创建简单索引是最直接的解决方案,但存在一些替代方案:

  • 将comment_id作为主键:这需要在(book_id、timestamp、user_id)上创建一个额外的唯一索引以保持完整性。
  • 将整个主键存储在book_comments_votes中: 这会显着增加表大小。

但是,推荐的解决方案仍然是在非主键上创建唯一索引,并避免替代方案的缺点。这种方法既简单又完整,且不会牺牲性能或数据存储效率。

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

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