既存の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制約を付けると内部的に一意インデックスが作成されるため、大規模なテーブルでは実行に時間がかかる可能性があります。
-
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
-
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型カラムを持つテーブルを作成するそれで