「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > MySQL InnoDB で非主キーを自動インクリメントできますか?

MySQL InnoDB で非主キーを自動インクリメントできますか?

2024 年 11 月 9 日に公開
ブラウズ:201

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

MySQL InnoDB: 非主キーの自動インクリメント

MySQL の InnoDB ストレージ エンジンでは、通常、主キーは自動インクリメントされます。ただし、主キー以外のキーも自動でインクリメントすることは可能です。

問題ステートメント

データベース スキーマには、「book_comments」と「book_comments_votes」という 2 つのテーブルが含まれています。 「book_comments」テーブルには、主キーとして「comment_id」への参照が含まれる「book_comments_votes」テーブルとの一貫性を保つために、非主キー列「comment_id」を自動インクリメントする必要があります。

解決策

主キー以外を自動インクリメントするには、それをインデックスとして宣言する必要があります。以下に例を示します:

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;

代替案とディスカッション

非主キーに単純なインデックスを作成するのが最も簡単な解決策ですが、いくつかの代替案が存在します。

  • comment_id を主キーにする: これには、整合性を維持するために (book_id、timestamp、user_id) に追加の一意のインデックスを作成する必要があります。
  • 全体を保存しますbook_comments_votes の主キー: これにより、テーブル サイズが大幅に増加します。

ただし、推奨される解決策は、非主キーに一意のインデックスを作成し、代替手段の欠点を回避することです。このアプローチは、パフォーマンスやデータ ストレージの効率を犠牲にすることなく、シンプルさと整合性の両方を提供します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3