主キー値ルール(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列または複数の列)に重複する値が存在しないこと。主キー列の値は空ではないこと。つまり、ユーザーは主キー列に値を入力する必要があります。
データベースは、ユーザーに対してテーブルに主キーを定義することを強制しませんが、主キーを使用することで、テーブル内の各行データを一意に決定でき、重複するデータ行が存在しなくなります。
次の図は、deptテーブルに定義されたPRIMARY KEY制約、およびこの制約に違反するデータ行を示しています。deptテーブルにはdeptno、dname、locの3列が含まれています。deptno列に主キー制約を定義した場合、この列には重複データが存在できず、また空にすることもできません。
図には、主キー制約に違反してdeptテーブルに挿入できない2行のデータも示されています。1行のデータの主キー値が既存データと重複しており、もう1行のデータの主キー列がNULL値です。
