1. 複合主キー いわゆる複合主キーとは、テーブルの主キーが複数のフィールドで構成され、ビジネス上の意味を持たない自動増分 ID を主キーとして使用しないことを意味します。 テーブルテストの作成 ( 名前varchar(19)、 ID番号、 値varchar(10)、 主キー (名前、ID) ) 上記の name フィールドと id フィールドの組み合わせは、テスト テーブルの複合主キーです。name フィールドに重複した名前がある可能性があるため、レコードの一意性を確保するために ID フィールドを追加する必要があります。一般的に、主キーのフィールド長と数はできるだけ小さくする必要があります。 ここで疑問が生じます。主キーは唯一のインデックスなのに、なぜテーブルで複数の主キーを作成できるのでしょうか。 実際のところ、「主キーが唯一のインデックスである」という記述は少し曖昧です。例えば、テーブルにIDフィールドを作成し、それを自動増加させて主キーに設定する。これは「主キーは一意のインデックス」であり、IDの自動増加により一意性が確保されるため、問題なく可能です。 この時点で、varchar 型の別のフィールド名を作成し、それを主キーとして設定します。テーブルの複数の行に同じ名前の値を入力できることがわかります。これは、「主キーが唯一のインデックスである」というステートメントに違反していませんか? だから、「主キーが唯一のインデックスである」というのは曖昧だと言ったのです。 「テーブルに主キーが 1 つしかない場合は、一意のインデックスです。テーブルに主キーが複数ある場合は、複合主キーと呼ばれ、複合主キーが共同で一意のインデックスを保証します。」と正しくは、「テーブルに主キーが 1 つしかない場合は、一意のインデックスです。テーブルに主キーが複数ある場合は、複合主キーと呼ばれ、複合主キーが共同で一意のインデックスを保証します。」です。 自己増分 ID を一意の主キーとして使用できるのに、複合主キーが必要なのはなぜですか?すべてのテーブルに ID フィールドが必要なわけではないからです。たとえば、学生テーブルを作成し、学生を一意に識別できる ID がない場合、どうすればよいでしょうか。学生の名前、年齢、クラスが重複している場合があり、単一のフィールドを使用して一意に識別することはできません。このとき、複数のフィールドを主キーとして設定して、複合主キーを形成できます。これらの複数のフィールドは共同で一意性を識別します。その中で、一部の主キー フィールド値が重複していても問題ありません。複数のレコードのすべての主キー値がまったく同じでない限り、重複とは見なされません。 2. 共同主キー 名前が示すように、複合主キーは複数の主キーの組み合わせです (主キーは原則として一意であるため、一意の値を気にする必要はありません)。 結合主キーの意味: 2 つのフィールド (または複数のフィールド、次の 2 つのフィールドの特定の組み合わせ) を使用してレコードを決定することは、これらの 2 つのフィールドが一意ではなく、個別に繰り返すことができることを意味します。この設定の利点は、繰り返されるフィールドのレコード数を直感的に確認できることです。 簡単な例 主キーAと主キーBは共同主キーを形成する 主キー A と主キー B のデータはまったく同じである場合があります。結合は、主キー A と主キー B によって形成される結合主キーが一意であるという事実にあります。 次の例では、主キー A のデータは 1 であり、主キー B のデータも 1 です。結合主キーは実際には 11 です。この 11 は一意の値であり、一意の値 11 が再び出現することは絶対に許可されません。 (これは多対多の関係です) 主キーAデータ 主キーBデータ 1 1 主キーAと主キーBの結合主キーの最大値は 11 要約:私の意見では、複合主キーは ID + 名前、ID + 電話などの複数のフィールドで構成されますが、結合主キーは 2 つのテーブルの主題を同時に組み合わせたものです。これが複合主キーとの最大の違いです。 以上が、SQL ステートメントにおける複合主キーと結合主キーの初期調査に関するこの記事の内容のすべてです。皆様のお役に立てれば幸いです。興味のある方は、いくつかの重要な MySQL 変数、MySQL の準備原則の詳細な説明、外部キー制約を持つテーブル データを削除するための MySQL メソッドの紹介などを参照してください。ご質問がある場合は、いつでもメッセージを残していただけます。一緒に話し合い、進歩することができます。 以下もご興味があるかもしれません:
|
>>: CocosCreator でカメラトラッキングに cc.follow を使用する方法
現在、CSS プリプロセッサは Web 開発の標準となっています。 プリプロセッサの主な利点の 1 ...
Docker は本当に素晴らしいです。特に、仮想マシンを使用する場合に比べて、Docker イメージ...
テーブル ヘッダーでは、明るい境界線の色を個別に定義できます。基本的な構文<TH ボーダーカラ...
elementUI が提供する el-select コンポーネントのスタイルを変更する方法この問題...
この記事では、MySQL のスケジュールされたデータベース バックアップ操作の例について説明します。...
みなさんこんにちは。私は梁旭です。 Linux を使用するときに、計算を行う必要がある場合があり、そ...
目次1. はじめに:この場合、通常は 2 つのアプローチがあります。 2. CancelToken ...
mysql 5.7.19 winx64のインストールチュートリアルは以下のように記録され、みんなと...
質問LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...
<br />ブログを始めて 1 年、私はブログの内外で多くのことを個人的に学びました。ま...
目次事前準備実施方法: 1. 単一のデータを挿入する2. マージデータ挿入3. MySqlBulkL...
1. 作成する [テーブル名] (フィールド1、フィールド2、...) 値 (値1、値2、...) ...
1つ: 1.セマンティック タグは単なる HTML であり、CSS にはセマンティクスはありません...
問題を見つける最近、仕事で問題が発生しました。InnoDB タイプの SQL ファイルを実行すると、...