ホームページ >データベース >mysql チュートリアル >mysql複合主キーとはどういう意味ですか?
MySQL では、複合主キーとは、データベース テーブルの主キーに複数のフィールドが含まれること、つまり、複数フィールドの主キーを意味します。複合主キーは主キーの一種であり、主キーと同じ機能と定義。複合主キーには不要な冗長列を含めることはできません。複合主キーの列が削除されたときに、残りの列で構成される主キーが一意性原則を満たしている場合、複合主キーは正しくありません。
このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。
データテーブルの複合主キーとは何ですか?
いわゆる複合主キーとは、テーブルの主キーに複数のフィールドが含まれていることを意味します。
MySQL のマルチフィールド主キーは、複合主キーになることもできます。複合主キーも主キーの一種であり、主キーと同じ機能と定義を持ちます。
主キー制約は、テーブル内のデータの各行の識別子を一意に決定するためにテーブル内の主キーを定義します。主キーは、テーブル内の特定の列または複数の列の組み合わせにすることができ、複数の列で構成される主キーは複合主キーと呼ばれます。
複合主キーには不必要な冗長列を含めることはできません。複合主キーの列が削除されたときに、残りの列で構成される主キーが一意性原則を満たしている場合、その複合主キーは正しくありません。これが最小化の原理です。
例:
create table test ( name varchar(19), id number, value varchar(10), primary key (name,id) )
上記の名前フィールドと ID フィールドの組み合わせは、テスト テーブルの複合主キーです。
これは、名前フィールドが同じである可能性があるために表示されます。 name. であるため、レコードの一意性を保証するために ID フィールドを追加する必要があります。
複合主キーが表示されるのはなぜですか?
これは、テーブル名が原因です。フィールドが同じ名前を持つ可能性があるため、レコードの一意性を確保するために id フィールドを追加する必要があります。開発では、主キー フィールドを 1 つ保持することをお勧めします。2 つの複合主キーを作成する必要がある場合は、オブジェクトを一意に識別するフィールド。
それでは、再び質問になりますが、テーブルには主キーが 1 つしか持てないということではないでしょうか?主キーはテーブルの唯一のインデックスですが、なぜテーブルで複数の主キーを作成できるのでしょうか?
実際、「主キーが唯一のインデックスである」というのは少し曖昧です。例を示します: 私たちは、テーブルに id フィールドがあることに慣れており、これは自動拡張するように設定され、次のように設定されています。この時点では「主キーが唯一のインデックス」であり、ID は一意性を確保するために自動的に増加します。このとき、フィールド名 varchar(50) が作成されると、それが主キーとしても設定され、このとき、id と name が複合主キーとなり、テーブル内の name フィールドに同じ名前の値を挿入できます。データを挿入するとき。このとき、別の問題があります。「主キーは一意のインデックスです。どうすれば同じ値を持つことができますか?」と言われませんか?
だから、「主キーは「一意のインデックス」は曖昧です; 主キーは一意のインデックスです 前提は、「テーブル内に主キーが 1 つだけある場合、それが唯一のインデックスです。テーブル内に複数の主キーがある場合、それは複合インデックスと呼ばれます」主キー。複合主キーの組み合わせにより一意のインデックスが保証されます。これは、複合主キーの組み合わせとして理解できます。テーブルの一意のインデックス (主キー)。自己増加 ID が既に一意の識別のための主キーとして使用されているのはなぜですか? なぜ複合主キーが依然として必要なのでしょうか?すべてのテーブルに ID フィールドが必要なわけではないため、たとえば、学生テーブルを作成するときに、学生を識別できる一意の ID がない場合はどうすればよいでしょうか。生徒の名前、年齢、クラスは繰り返される可能性があり、単一のフィールドを使用して一意に識別することはできません。この場合、複数のフィールドを主キーとして設定して、複合主キーを形成できます。これらの複数のフィールドを結合して一意性を識別します。その中で、確かに主キーフィールドの値が重複していても問題ありませんが、複数のレコードの主キーの値がすべて全く同じであれば重複とはみなされません。
要約: 開発では、主キー フィールドを 1 つ保持することが最善です。2 つの複合主キーを作成する必要がある場合は、テーブルの作成時にオブジェクトを一意に識別できるフィールドを探す必要があります。 。つまり、複合主キーの使用量を減らします。
複合主キーを追加するにはどうすればよいですか?
テーブルの作成時に複合主キーを追加できます。このとき、主キーは複数のフィールドで構成されます。構文規則は次のとおりです:
PRIMARY KEY [字段1,字段2,…,字段n]
例:主キー ID がないことを前提としてデータ テーブル tb_emp を作成します。従業員を一意に識別するには、name と deptId を主キーとして組み合わせます
mysql> CREATE TABLE tb_emp -> ( -> name VARCHAR(25), -> deptId INT(11), -> salary FLOAT, -> PRIMARY KEY(id,deptId) -> ); Query OK, 0 rows affected (0.37 sec)
#結合主キー
結合主キーと複合主キーの違いは、結合主キーは複数のテーブルに反映され、複合主キーはテーブル内の複数のフィールドに反映されます。学生表:student create table student( id int auto_increment comment '主键id', name varchar(30) comment '姓名', age smallint comment '年龄', primary key(id) ); 课程表:course create table course( id int auto_increment comment '主键id', name varchar(30) comment '课程名称', primary key(id) ); 学生课程表:stu_course create table IF NOT EXISTS stu_cour( id int auto_increment comment '主键id', stu_id mediumint comment '学生表id', cour_id mediumint comment '课程表id', primary key(id) );現時点では、stu_course の id は共同主キーを表しており、学生とコースのレコードは id
を通じて取得できます。
したがって、結合主キーは、その名前が示すように、複数の主キーを組み合わせて主キーの組み合わせを形成し、それが和集合に反映されます。 (主キーは原則として一意であり、一意の値によって問題になることはありません) インデックスを使用すると、データ クエリの速度が大幅に向上しますが、テーブルの挿入、削除、更新の速度が遅くなります。インデックスを操作する必要があります。簡単な例: 主キー A と主キー B は結合主キー C を形成します。主キー A と主キー B のデータはまったく同じにすることができます。結合とは、主キー A と主キーによって形成される結合主キー C です。 B はユニークです。
[関連する推奨事項: mysql ビデオ チュートリアル ]
以上がmysql複合主キーとはどういう意味ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。