カラムにほかのデータと重複しない一意制約(ユニークキー)の追加と削除をする書き方について紹介していきます
テーブル作成時にユニークキーを設定する
テーブル作成時にユニークキーを設定する方法について紹介していきます
テーブル作成の構文
create table テーブル名(カラム名 データ型 オプション,
カラム名 データ型 オプション);
コードの見方
テーブル名:作成するテーブルの名前を記載する
カラム名:テーブルに作成する列名を記載する
データ型:カラムに対してデータ型(int,varcharなど)を指定する
オプション:以下を指定する
- unique key・・・指定したカラムを重複不可とする
テーブル作成に関する詳細な記事は以下を参照
使用するSQL
create table drinks(id int not null auto_increment primary key,
name varchar(255) not null unique key,
price int not null);
上記を実行してカラムの制約を確認します
テーブル構造を確認する
show columns from drinks;
出力結果
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| price | int(11) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.017 sec)
nameカラムにUNIQUEと設定されていることがわかります。
以降の章では上記のテーブルを利用していきます
ユニークキーを削除・追加する
テーブル作成後でもユニークキー(一意制約)を削除・追加することができます
ユニークキーをカラムから削除する
上記で作成したテーブルのユニークキーをnameカラムから削除していきます
削除前のテーブル構造は次のとおりです。
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| price | int(11) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.017 sec)
nameカラムのKeyにUNIと表示されているため、現在はユニークキーが設定されています。
構文
ALTER TABLE テーブル名 DROP INDEX ユニークキー名;
- テーブル名・・・ユニークキーを削除するテーブルを指定
- カラム名・・・削除するユニークキーの名前を指定
テーブル名はdrinksテーブルを指定
カラム名はユニークキーを設定したnameカラムを指定
MySQLでは、ユニークキーはユニークインデックスとして管理されているため、削除するときはDROP INDEXを使用します。
今回はdrinksテーブルに設定されている、nameという名前のユニークキーを削除します。
使用するSQL
ALTER TABLE drinks DROP INDEX name;
上記を実行してからテーブル構造を確認する
出力結果
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| price | int(11) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.015 sec)
削除前に表示されていたUNIが、削除後には表示されていません。これでnameカラムからユニークキーを削除できました。
ユニークキーをカラムに追加する
再度ユニークキーをnameカラムに追加していきます
構文
ALTER TABLE テーブル名 ADD UNIQUE KEY ユニークキー名 (カラム名);
- テーブル名 ・・・ユニークキーを追加するテーブルを指定
- ユニークキー名・・・追加するユニークキーの名前を指定
- カラム名 ・・・同じ値を登録できないようにするカラムを指定
テーブル名はdrinksテーブルを指定
カラム名はnameカラムを指定
今回はdrinksテーブルのnameカラムに、uq_drinks_nameという名前のユニークキーを追加します。
uq_drinks_nameは決まり文句ではなく、今回追加するユニークキーを見分けるために付けた名前です。
使用するSQL
ALTER TABLE drinks ADD UNIQUE KEY uq_drinks_name (name);
上記を実行してからテーブル構造を確認する
出力結果
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | UNI | NULL | |
| price | int(11) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
3 rows in set (0.013 sec)
追加前には何も表示されていなかったnameカラムのKeyに、UNIが表示されています。これでnameカラムへユニークキーを追加できました。


