ホームページ > データベース > mysql チュートリアル > MySQL InnoDB で非主キーを自動インクリメントできますか?

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

Mary-Kate Olsen
リリース: 2024-11-03 04:23:03
オリジナル
328 人が閲覧しました

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

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

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

問題ステートメント

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

解決策

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

<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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート