カラムに一意制約(ユニークキー)を追加・削除する書き方~UNIQUE~

カラムにほかのデータと重複しない一意制約(ユニークキー)の追加と削除をする書き方について紹介していきます

テーブル作成時にユニークキーを設定する

テーブル作成時にユニークキーを設定する方法について紹介していきます

テーブル作成の構文

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カラムへユニークキーを追加できました。

タイトルとURLをコピーしました