首頁  >  文章  >  資料庫  >  MySQL InnoDB 可以自動遞增非主鍵嗎?

MySQL InnoDB 可以自動遞增非主鍵嗎?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-03 04:23:03293瀏覽

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