MySQL で MUL と PRI と UNI の比較
このチュートリアルでは、MySQL の PRI
、MUL
、および UNI
キーについて説明します。
このチュートリアルを段階的に実行することで、PRI
、MUL
、および UNI
キーの基本的な違いと、それぞれの使用方法を確認できます。また、サンプルコードを使用して、それらの効果を表で確認します。
MySQL のキー
キーは、テーブルから行を一意に識別するために使用される属性または属性のセットです。
MySQL では、主キー、一意キー、複合キー、外部キー、スーパーキー、代替キー、候補キーなど、さまざまなキーがさまざまな目的で使用されます。
この記事では、プライマリキー、一意キー、およびマルチキーに焦点を当てます。
MySQL の PRI
、UNI
、および MUL
キー
PRI
はプライマリキーを意味し、テーブル内のレコードの一意性を強制します。NULL
値は許可されません。
単一の列または複数の列を主キーとして使用できます。UNI
キーは一意キーを表し、主キーのようにテーブル(関係)内の行(レコード)の一意性を強制し、NULL
値を持ちます。
1つまたは複数の列を使用して、一意のキーを作成できます。
MUL
キーはそれらのいずれでもありません。つまり、MUL
キーは主キーでも一意キーでもないインデックスです。NULL
値を許可し、その名前 MUL
と同じ値が複数回出現することを許可します。
同じ列に複数のキーが適用されている場合、キーは優先度、PRI
、UNI
、および MUL
に従って表示されます。
次のサンプルコードを使用して理解しましょう。
#create an employee table
CREATE TABLE employee(
ID INT PRIMARY KEY NOT NULL, #this is PRI Key
FIRST_NAME VARCHAR(60) NOT NULL,
LAST_NAME VARCHAR(60) NOT NULL,
GENDER VARCHAR(60) NOT NULL, INDEX(GENDER), #this is MUL Key
COUNTRY_CODE VARCHAR(30), INDEX(COUNTRY_CODE), #this is MUL Key
CITIZEN_ID INT UNIQUE KEY #this is UNI Key
);
#insert some data
INSERT INTO employee(ID, FIRST_NAME, LAST_NAME,GENDER, COUNTRY_CODE,CITIZEN_ID)
VALUES
(1,'Thomas', 'Christopher','Male','+61',485),
(2,'Lisa', 'Mark', 'Female','+59',408),
(3,'Anthony', 'Richard', 'Male','+61',215),
(4,'Matthew', 'Charles', 'Male',NULL, 610),
(5,'Kiren', 'Donald','Female','+31', null);
#use the following query to describe table columns and their properties
desc employee;
出力:
上記のサンプルコードを参照し、出力を観察して理解してください。テーブル内に含めることができる PRI
キーは 1つだけですが、UNI
キーと MUL
キーは複数存在する可能性があることに注意してください。
上記の出力では、ID
列に 1つの PRI
キーが適用されていますが、これは NULL
値を許可していません。つまり、1つの ID
が従業員に割り当てられている場合、その同じ ID
はテーブル内の他のどの ID
にも割り当てられません。
CITIZEN_ID
列に 1つの UNI
キーが適用されています。一意性を強制し、NULL
値を許可します。GENDER
と COUNTRY_CODE
という名前の 2つの異なる列に 2つの MUL
キーが表示されます。
MUL
キーは、GENDER
列が NULL
値を持つことはできないが、COUNTRY_CODE
は持つことができる両方の列で正常に機能していると考える必要があります。これが、MUL
が PRI
でも UNI
キーでもないと言う理由です。
まとめ
上記の説明では、キーは、テーブル内でキーを一意に識別するために列に適用される属性であると結論付けました。
要件ごとに異なるキーが使用されます。PRI
は、列内で値を繰り返したくない場合や、NULL
値を許可しない場合に使用します。
UNI
キーは列内の一意性に焦点を合わせていますが、NULL
値を許可します。MUL
は PRI
でも UNI
でもなく、NULL
と NOT NULL
の値を受け入れることができます。
PRI
キーは 1つしか存在できませんが、プロジェクトの要件に応じて、複数の UNI
および MUL
キーを使用できます。