MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

既存のMySQLテーブルの列にUNIQUE制約を追加する方法|ALTER TABLEの使い方を解説

既存のMySQLテーブルの列(フィールド)にUNIQUE制約を追加したい場合は、ALTER TABLEステートメントを使用します。UNIQUE制約を設定することで、その列に同じ値が重複して登録されるのを防ぐことができます。

構文

UNIQUE制約の追加には、主に以下の2つの書き方があります。

ALTER TABLE table_name MODIFY colum_name datatype UNIQUE;
                   OR
ALTER TABLE table_name ADD UNIQUE (colum_name);
  • MODIFY句を使う方法: 列のデータ型を再定義しながらUNIQUE制約を同時に付与します。
  • ADD UNIQUE句を使う方法: 既存の列定義を変更せず、UNIQUEインデックスだけを後から追加します。

実行例

例として、「test4」というテーブルがあり、その「Name」列にUNIQUE制約を追加するケースを見てみましょう。まず、現在のテーブル構造をDESCRIBEで確認します。

mysql> DESCRIBE test4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(11)     | YES  | UNI | NULL    |       |
| Name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)

mysql> ALTER TABLE test4 MODIFY Name Varchar(20) UNIQUE;
Query OK, 0 rows affected (0.22 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> DESCRIBE test4;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| ID    | int(11)     | YES  | UNI | NULL    |       |
| Name  | varchar(20) | YES  | UNI | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.04 sec)

この結果セットから、ALTER TABLEコマンドの実行後に「Name」フィールドのKey列が「UNI」と表示されていることが確認できます。これにより、MySQLが「Name」列にUNIQUE制約を正常に付与したことが分かります。

なお、同じことはADD UNIQUE句を使った次のクエリでも実現できます。

mysql> ALTER TABLE test4 ADD UNIQUE(name);
Query OK, 0 rows affected (0.16 sec)
Records: 0 Duplicates: 0 Warnings: 0

実行時の注意点

  • 重複データの存在: 対象の列にすでに重複した値が含まれている場合、UNIQUE制約の追加はエラーになります。事前に重複チェックを行い、必要ならデータを整理しておきましょう。
  • NULL値の扱い: UNIQUE制約付きの列でもNULL値は複数登録できる場合があります。アプリケーション側の要件に応じてNOT NULL制約との併用も検討してください。
  • インデックスの作成: UNIQUE制約を付けると内部的に一意インデックスが作成されるため、大規模なテーブルでは実行に時間がかかる可能性があります。
  1. MySQLで既存のカラムにUNIQUE制約を追加する方法

    MySQLで既存のカラムを一意(UNIQUE)にする方法MySQLで既存のフィールド(カラム)を一意にするには、ALTER TABLEコマンドを使用してUNIQUE制約を設定します。本記事では、実際のコード例とともに、その手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、動作確認用のテーブルを作成しましょう。mysql> create table AddingUnique -> ( -> Id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.44 s

  2. MySQLでブール型(BOOLEAN)フィールドを追加する方法を徹底解説

    MySQLには厳密な意味での「ブール型」は存在せず、BOOLやBOOLEANとして定義した場合でも、内部的にはすべてTINYINT(1)として扱われます。つまり、tinyint(1)、bool、booleanの3つは完全なシノニム(同義語)です。MySQLにおける真偽値の扱いMySQLでは、0が偽(false)、0以外の数値が真(true)として解釈されます。PHPと同様に、0以外の任意の数値もtrueとして扱われる点に注意しましょう。実務上は、可読性を高めるためにtrue/falseリテラルを使うか、規約として0と1のみを使用するのが一般的です。BOOL型カラムを持つテーブルを作成するそれで