「主キー」と「一意キー」
2014年6月4日:MySQL
ID番号のように重複したらまずい値があります。
もし、ID番号が2つあったら、どちらを使えばいいかわからなくなってしまいます。
データベースでは、このような重複を許さない値を設定することができます。
それば、「主キー」と「一意キー」です。
ここでは、これらのキーの設定方法を紹介します。
主キー
では、主キーについて説明します。
主キー(primary key)とは
値が他と重複しない
何もデータが入力していない状態はない
という性質もったカラムのことです。構文は以下の通りです。
CREATE TABLE テーブル名 (カラム名 データ型 PRIMARY KEY…);
では、さっそくidを主キーとして、idとnameをカラムとしたテーブルmy_tb_pkeyをつくってみます。
mysql> CREATE TABLE my_tb_pkey(id VARCHAR(10) PRIMARY KEY,name VARCHAR(10));
とすれば、
Query OK, 0 rows affected (0.01 sec)
と表示されます。実際にDESCで見てみると
mysql> DESC my_tb_pkey;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | varchar(10) | NO | PRI | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
となっており、KeyのところがPRIとなっています。これは、主キーであることを示しています。
また、NullがNoになっているので、必ずデータを入れる必要があります。
実際に重複できないか調べるため、値をいくらか入れてみます。
まず、idにyamada、nameに山田太郎といれてみます。すると、
mysql> INSERT INTO my_tb_pkey VALUES('yamada','山田太郎');
となります。値を見てみると
mysql> SELECT * FROM my_tb_pkey;
+--------+--------------+
| id | name |
+--------+--------------+
| yamada | 山田太郎 |
+--------+--------------+
1 row in set (0.00 sec)
となっています。
では、id:yamada、name:山田美智子として値を入れてみます。すると
ERROR 1062 (23000): Duplicate entry ‘yamada’ for key ‘PRIMARY’
となります。予想どおり、主キーが重複してエラーがでてきます。
続いて、idにデータがない状態で値を入れてみます。すると
ERROR 1048 (23000): Column ‘id’ cannot be null
となり、エラーが生じます。
以上のように主キーでは
- 重複
- NULL
が許されないことがわかります。
一意キー
続いて一意キーについて解説します。
一意キー(Unique Key)では、カラム内での重複はできませんが、NULLの入力は可能な値です。そして
CREATE TABLE テーブル名(カラム名 データ型 UNIQUE…);
により設定します。
では、さきほどと同様の構造のテーブルmy_tb_ukeyをつくってみます。すると
mysql> CREATE TABLE my_tb_ukey(id VARCHAR(10) UNIQUE,name VARCHAR(10));
となります。DESCでカラムを表示すると
mysql> DESC my_tb_ukey;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | varchar(10) | YES | UNI | NULL | |
| name | varchar(10) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
となります。idのKeyが「UNI」になっていることがわかります。これは一意キーであることを意味します。
また、idのNullはYesなので使えます。
では、値を入れていきます。
mysql> INSERT INTO my_tb_ukey VALUES('yamada','山田太郎');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO my_tb_ukey VALUES('yamada','山田美沙子');
ERROR 1062 (23000): Duplicate entry 'yamada' for key 'id'
mysql> INSERT INTO my_tb_ukey VALUES(NULL,'山田美沙子');
Query OK, 1 row affected (0.01 sec)
上記のように、重複は許さないが、NULLは入力できることがわかります。
一意キーはNULLが使用可、主キーはNULLを使用できない
以上で主キーと一意キーの解説を終わります。
著者:安井 真人(やすい まさと)
@yasui_masatoさんをフォロー