MySQLのALTER TABLEで一意制約(UNIQUE)を追加する方法
MySQLでは、ALTER TABLE文を使うことで、すでに作成済みのテーブルに対して後から一意制約(UNIQUE制約)を追加できます。一意制約を設定すると、指定したカラム(または複数カラムの組み合わせ)に重複した値を挿入できなくなり、データの整合性を保つことができます。
1. テーブルを作成する
まず、サンプル用のテーブルを作成しましょう。ここでは「FirstName(名)」と「LastName(姓)」の2つのカラムを持つテーブルを用意します。
mysql> create table DemoTable1811
(
FirstName varchar(20),
LastName varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. ALTER TABLEで一意インデックスを追加する
次に、ALTER TABLE文とADD UNIQUE句を使って、FirstNameとLastNameの組み合わせに対して一意インデックスを追加します。複数カラムを指定した場合、「それぞれの値の組み合わせ」が一意である必要があります。
mysql> alter table DemoTable1811 ADD UNIQUE unique_index_first_last_name(FirstName, LastName); Query OK, 0 rows affected (0.00 sec) Records: 0 Duplicates: 0 Warnings: 0
この例では、インデックス名として unique_index_first_last_name を明示的に指定しています。名前を付けておくと、エラー発生時やインデックス削除時にどの制約かを特定しやすくなります。
3. レコードを挿入して動作を確認する
INSERT文でいくつかレコードを追加してみましょう。
mysql> insert into DemoTable1811 values('John','Smith');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1811 values('John','Doe');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1811 values('Adam','Smith');
Query OK, 1 row affected (0.00 sec)ここまでは正常に挿入されています。「John Smith」「John Doe」「Adam Smith」はすべて姓名の組み合わせが異なるためです。
しかし、すでに存在する組み合わせ「John Doe」を再度挿入しようとすると、一意制約違反のエラーが発生します。
mysql> insert into DemoTable1811 values('John','Doe');
ERROR 1062 (23000): Duplicate entry 'John-Doe' for key 'unique_index_first_last_name'エラーコード 1062(Duplicate entry)は、一意インデックスで定義されたキーに重複した値を登録しようとした際に出力されます。これにより、誤って同じデータが二重登録されることを防げます。
4. テーブルの内容を確認する
SELECT文でテーブル内の全レコードを表示してみます。
mysql> select * from DemoTable1811;
実行結果は以下の通りです。重複していた「John Doe」は挿入されず、3件のみ登録されていることがわかります。
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Adam | Smith | | John | Doe | | John | Smith | +-----------+----------+ 3 rows in set (0.00 sec)
まとめ
ALTER TABLE ... ADD UNIQUE インデックス名(カラム名, ...) を使えば、既存のテーブルに簡単に一意制約を追加できます。単一カラムだけでなく複数カラムの組み合わせにも適用できるため、ユーザー名やメールアドレスなど、重複を許したくないデータの保護にぜひ活用してください。
-
MySQLでVARCHAR型のカラムをNULL許容に変更する方法
MySQLでは、テーブルのカラム定義を後から変更できます。既存のVARCHAR型カラムをNULL値を許容する設定に変更したい場合は、ALTER TABLE文とCHANGE句を組み合わせて使用します。基本構文カラムをNULL許容に変更するには、以下の構文を使用します。ALTER TABLE テーブル名 CHANGE 変更前カラム名 変更後カラム名 データ型 NULL DEFAULT NULL;ポイントは、CHANGE句の後に「現在のカラム名」と「新しいカラム名」の両方を指定する必要がある点です。カラム名を変えない場合でも、同じ名前を2回記述します。また、データ型も改めて指定する必要があります。実
-
MySQLでON DUPLICATE KEY UPDATE用の一意制約(UNIQUE)を追加する方法
MySQLで特定のカラムに重複データが挿入されようとした際に「ON DUPLICATE KEY UPDATE」を正しく機能させるには、あらかじめそのカラムに一意制約(UNIQUE制約)を追加しておく必要があります。本記事では、制約の追加方法から実際の動作確認までを、サンプルコードとともにわかりやすく解説します。 制約を追加する基本構文 テーブルに一意制約を追加するには、以下の構文を使用します。 ALTER TABLE テーブル名 ADD CONSTRAINT 制約名 UNIQUE(カラム名); サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。ここでは「Name(名前)」と「