ホームページ >データベース >mysql チュートリアル >複合主キーを単一主キーに変更する方法

複合主キーを単一主キーに変更する方法

anonymity
anonymityオリジナル
2019-05-27 14:52:003311ブラウズ

いわゆる複合主キーとは、テーブルの主キーに複数のフィールドが含まれており、ビジネス上の意味を持たない自動インクリメント ID を主キーとして使用しないことを意味します。

create table test 
( 
   name varchar(19), 
   id number, 
   value varchar(10), 
   primary key (name,id) 
)

上記の名前フィールドと ID フィールドの組み合わせは、テスト テーブルの複合主キーです。名前フィールドが同じ名前を持つ可能性があるため、このように表示されます。 ID を追加します。フィールドによってレコードの一意性が保証されます。一般に、主キーのフィールド長とフィールド数はできるだけ小さくする必要があります。

複合主キーを単一主キーに変更する方法

ここで疑問が生じるでしょう? 主キーが唯一のインデックスであるのに、なぜテーブルで複数の主キーを作成できるのでしょうか?

実のところ、「主キーが唯一のインデックスである」というのは少し曖昧です。たとえば、テーブルに ID フィールドを作成し、自動的に拡張して主キーとして設定しましたが、「主キーは唯一のインデックス」であり、ID フィールドは自動的に拡張されるため問題ありません。一意性を確保するためです。

この時点で、varchar 型で別のフィールド名を作成し、それを主キーとして設定します。テーブルの複数の行に同じ名前の値を入力できることがわかります。これは違法ではありませんか? ? この文は「主キーが唯一のインデックスです」ということでしょうか?

これが、「主キーが唯一のインデックスである」が曖昧だと述べた理由です。 「テーブル内に主キーが 1 つだけある場合、それが唯一のインデックスです。テーブル内に複数の主キーがある場合、それは複合主キーと呼ばれ、複合主キーの組み合わせにより一意性が保証されます。」索引。"

自己増加 ID はすでに一意の識別のための主キーとして使用できるのに、複合主キーが依然として必要なのはなぜですか?すべてのテーブルに ID フィールドが必要なわけではないためです。たとえば、学生テーブルを作成し、学生を一意に識別する ID がない場合、どうすればよいでしょうか? 学生の名前、年齢、クラスはすべて繰り返される可能性があります。単一のフィールドを一意の識別に使用することはできません。このとき、複数のフィールドを主キーとして設定して、複合主キーを形成できます。これらの複数のフィールドを合わせて一意性を識別します。その中で、特定の主キー フィールド値があれば問題ありません複数のレコードがない限り繰り返されます。すべての主キーの値がまったく同じである場合、それらは重複とは見なされません。

#複合主キーを単一の主キーに変更する方法

テーブルには主キーを 1 つだけ持つことができます:

1 つの列に基づく主キー :

alter table test add 制約 PK_TEST Primary key(ename);

複数の列に基づく統合主キー:

alter table test add制約 PK_TEST 主キー(名前,誕生日);

以上が複合主キーを単一主キーに変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:mysqlの仕組み次の記事:mysqlの仕組み