主キー値ルール(Primary Key Value Rule)は、特定のキー(Key、キーとは1列または複数列の集合を指す)に定義されるルールであり、テーブル内の各行データが特定のキー値によって一意に識別されることを保証します。
各データベーステーブルでは、最大で1つのPRIMARY KEY制約を定義できます。この制約を構成する列(1列または複数列)の値は、1行のデータを一意に識別するための識別子として機能し、すなわち各データ行はその主キー値によって名付けることができます。
本記事では、以下の具体的な例を通じて主キー制約の主要な特性を紹介します。
obclient> CREATE TABLE t1(c1 INT, c2 INT, CONSTRAINT pk_c1_c2 PRIMARY KEY(c1, c2));
Query OK, 0 rows affected
obclient> INSERT INTO t1 VALUES(1, 1);
Query OK, 1 row affected
obclient> INSERT INTO t1 VALUES(1, 1);
OBE-00001: unique constraint '1-1' for key 'PK_C1_C2' violated
obclient> INSERT INTO t1 VALUES(null, 1);
OBE-01400: cannot insert NULL into '(C1)'
obclient> INSERT INTO t1 VALUES(null, null);
OBE-01400: cannot insert NULL into '(C1)'
PRIMARY KEY整合性制約(Integrity Constraint)は、テーブルのデータが以下の2つのルールに従うことを保証します:
任意の2行のデータにおいて、
PRIMARY KEY制約列(1列または複数列)に重複する値が存在しないこと。主キー列の値がNULLではないこと。つまり、ユーザーは主キー列に値を入力する必要があります。
データベースは、ユーザーに対してテーブルに主キーを定義することを強制しませんが、主キーを使用することで、テーブル内の各行データを一意に特定でき、重複するデータ行が存在しなくなります。
下図は、dept テーブルに定義された PRIMARY KEY 制約、およびこの制約に違反するデータ行を示しています。dept テーブルには deptno、dname、loc の3列が含まれています。deptno 列に主キー制約を定義すると、この列に重複データを含めることはできず、NULL値も許容されません。
図には、主キー制約に違反するため dept テーブルに挿入できない2行のデータも示されています。1行のデータは主キー値が既存データと重複しており、もう1行のデータは主キー列がNULL値です。
