テーブルを作るときは大体プライマリーキーを設定してテーブルを作るんだけど、
そういえばユニークキーというのもあったよなと思って調べてみた。
何が違うんだろうか。
プライマリーキー
重複する値は保存できない。またnullは入れられない。
プライマリーキー制約
実際に見てみる。
まずはデータベースを選択して、
その後にテーブルを作る。
mysql> create table primarytest(id int not null primary key, name varchar(10)); Query OK, 0 rows affected (0.06 sec)
出来たか確認する。
mysql> show columns from primarytest; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | | name | varchar(10) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.05 sec)
OKできてる。
idカラムにプライマリーキーを指定したので、
重複する値は扱えない。
mysql> insert into primarytest(id,name) values(1,'kenta'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
idが1の値はもう保存できない。
続いてnullを入れてみる。
mysql> insert into primarytest(id,name) values(null,'toshi'); ERROR 1048 (23000): Column 'id' cannot be null
nullはできない、と。
ユニークキー
重複する値は保存できない。けどnullは入れられる。
ユニークキー制約
先ほどと同じようにテーブルを作る。
mysql> create table uniquetest(id int unique,name varchar(10)); Query OK, 0 rows affected (0.04 sec)
プライマリーキーと同じで、
重複した値は保存できない。
mysql> insert into uniquetest(id,name) values(1,'namiko'); Query OK, 1 row affected (0.00 sec) mysql> insert into uniquetest(id,name) values(1,'pinko'); ERROR 1062 (23000): Duplicate entry '1' for key 'id'
nullを入れてみる。
mysql> insert into uniquetest(id,name) values(null,'nullko'); Query OK, 1 row affected (0.00 sec)
保存できた。
見てみる。
mysql> select * from uniquetest; +------+--------+ | id | name | +------+--------+ | 1 | namiko | | NULL | nullko | +------+--------+ 2 rows in set (0.00 sec)
ちゃんとnullが保存されてる。
プライマリーキーとユニークキーの違いはnull値を保存できるかどうか。