カラムにほかのデータと重複しない一意制約(ユニークキー)の追加と削除をする書き方について紹介していきます
テーブル作成時にユニークキーを設定する
テーブル作成時にユニークキーを設定する方法について紹介していきます
テーブル作成の構文
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カラムから削除していきます
構文
alter table テーブル名 drop constraint カラム名;
- テーブル名・・・ユニークキーを削除したいカラムのあるテーブルを指定
- カラム名・・・ユニークキ―の付与されているカラム名を指定
テーブル名はdrinksテーブルを指定
カラム名はユニークキーを設定したnameカラムを指定
使用するSQL
alter table drinks drop constraint 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)
nameカラムからUNIQUEが削除されていることがわかります。
ユニークキーをカラムに追加する
再度ユニークキーをnameカラムに追加していきます
構文
alter table テーブル名 add constraint unique(カラム名);
- テーブル名・・・ユニークキーを追加したいカラムのあるテーブルを指定
- カラム名・・・ユニークキ―を追加したいカラム名を指定
テーブル名はdrinksテーブルを指定
カラム名はnameカラムを指定
使用するSQL
alter table drinks add constraint 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.013 sec)
nameカ nameカラムにUNIQUEと設定されていることがわかります。