MySQL で自動インクリメント複合キーを実装するにはどうすればよいですか?

DDD
リリース: 2024-11-02 19:25:30
オリジナル
189 人が閲覧しました

How Can I Implement Auto-Incrementing Composite Keys in MySQL?

MySQL での複合キーの自動インクリメント: 総合ガイド

リレーショナル データベースを使用する場合、テーブルで必要なシナリオがよく発生します。複数の列で構成される複合キー。 MySQL では、複合キーの実装により、レコードを一意に識別するために自動インクリメント値の使用が必要になる場合があります。

2 つの外部キー ('app_id' と 'app_id' を参照する 'issue_log' テーブルがあるシナリオを考えてみましょう。 'test_id')。これらの外部キーの一意の組み合わせごとに、さらに識別できるように自動インクリメント列 ('sr_no') が必要です。この設定では、3 つの列 ('app_id'、'test_id'、および 'sr_no') に複合キーが必要です。

この複合キーを実装するには、最初に次のような SQL ステートメントを使用しようとします。

`CREATE TABLE issue_log (
sr_no INT NOT NULL AUTO_INCREMENT、
app_id INT NOT NULL、
test_id INT NOT NULL、
issue_name VARCHAR(255) NOT NULL、
PRIMARY KEY (app_id, test_id, sr_no)
);`

ただし、このクエリを実行すると、「テーブル定義が正しくありません。自動列は 1 つしか存在できません。キーとして定義されています。」このエラーは、MySQL ではテーブルごとに 1 つの自動インクリメント カラムしか許可されていないことが原因で発生します。

この問題は、InnoDB ストレージ エンジンの制限により発生します。 InnoDB テーブルでは、すべての主キーにインデックスを付ける必要があります。つまり、複合主キーに自動インクリメント列を含めると、パフォーマンスの低下につながる可能性があります。

この問題を克服して望ましい結果を達成するには、次のいずれかを行うことができます。

  • トリガーまたはプロシージャを使用する: このアプローチには、'app_id' と 'test_id' の一意の組み合わせに基づいて 'sr_no' 列をインクリメントするトリガーまたはプロシージャの作成が含まれます。ソリューションで提供されるトリガーの例では、新しい行がそれぞれ 'issue_log' テーブルに挿入される前に、'sr_no' 列が自動的にインクリメントされます。
  • 別のデータベース エンジンを使用する: を使用する場合トリガーやプロシージャが望ましくない場合は、MyISAM などの別のデータベース エンジンの使用を検討してください。 MyISAM には InnoDB と同じ制限がなく、複合キーで複数の自動インクリメント列が可能です。

トリガーまたはプロシージャはパフォーマンスにわずかな影響を与える可能性があることに注意することが重要です。そのため、要件を考慮してください。適切なソリューションを選択する前に、データの量を確認してください。

以上がMySQL で自動インクリメント複合キーを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!