MySQLでvarchar型の複数列にUNIQUE制約を設定する方法
MySQLでは、1つまたは複数の列(カラム)に対してUNIQUE制約を設定できます。varchar型の列も例外ではなく、複数のvarchar列を組み合わせた複合ユニーク制約を定義することで、「列の組み合わせが重複しない」ようにデータの整合性を保つことが可能です。
UNIQUE制約の基本構文
既存のテーブルにUNIQUE制約を追加するには、ALTER TABLE文を使用します。
alter table yourTableName add unique(yourColumnName1,yourColumnName2,...N);
この構文では、指定した複数の列の値を組み合わせた全体が一意である必要があります。つまり、片方の列の値が重複していても、もう片方の値が異なれば登録が許可されます。
サンプルテーブルの作成
まず、動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable1598
-> (
-> EmployeeId int,
-> EmployeeName varchar(20),
-> EmployeeCountryName varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)
このテーブルには、従業員ID(int型)、従業員名(varchar型)、勤務国名(varchar型)の3つの列が定義されています。
varchar型の複数列にUNIQUE制約を追加
次に、「EmployeeName」と「EmployeeCountryName」の2つのvarchar列に対してUNIQUE制約を設定します。
mysql> alter table DemoTable1598 add unique(EmployeeName,EmployeeCountryName);
Query OK, 0 rows affected (0.55 sec)
Records: 0 Duplicates: 0 Warnings: 0
これで、同じ「氏名+国名」の組み合わせを持つレコードは登録できなくなります。
データの挿入と重複チェックの検証
INSERTコマンドでいくつかレコードを挿入してみましょう。
mysql> insert into DemoTable1598 values(101,'Adam','AUS');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1598 values(102,'John','US');
Query OK, 1 row affected (0.64 sec)
mysql> insert into DemoTable1598 values(103,'Adam','US');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1598 values(104,'Adam','AUS');
ERROR 1062 (23000): Duplicate entry 'Adam-AUS' for key 'EmployeeName'
ここで注目すべきポイントがあります。「Adam」という名前自体は3件登録されています。しかし4つ目のINSERT文では、101番目のレコードと同じ「Adam+AUS」という組み合わせのため、ERROR 1062(重複エラー)が発生し、登録に失敗しました。
これは、UNIQUE制約が単一の列ではなく「EmployeeNameとEmployeeCountryNameの組み合わせ」に対して機能していることを示しています。
登録済みデータの確認
SELECT文ですべてのレコードを表示してみます。
mysql> select * from DemoTable1598;
実行結果は以下の通りです。
+------------+--------------+---------------------+
| EmployeeId | EmployeeName | EmployeeCountryName |
+------------+--------------+---------------------+
| 101 | Adam | AUS |
| 102 | John | US |
| 103 | Adam | US |
+------------+--------------+---------------------+
3 rows in set (0.00 sec)
まとめ
このように、MySQLのUNIQUE制約を複数のvarchar列に適用すると、各列単独ではなく組み合わせ全体の一意性が保証されます。同名の従業員がいても、国名が異なれば問題なく登録でき、完全に重複するデータのみエラーとして弾かれます。マスターデータの品質維持や不正な重複登録の防止に役立つ機能なので、ぜひ活用してください。
-
JavaとMySQLで現在の日付に月数を追加する方法(INTERVAL句の使い方)
JavaとMySQLを組み合わせて現在の日付に月数を追加するには、INTERVAL句を使用します。以下がその基本構文です。 String query; query = insert into テーブル名 values(curdate()+interval 追加する月数 month); 現在の日付を確認する まず、curdate()関数を使って現在の日付を確認してみましょう。 mysql> select curdate(); +------------+ | curdate() | +------------+ | 2020-10-25 | +------------+ 1 row in
-
MySQLでAUTO_INCREMENT列を扱う方法を徹底解説
MySQLでは、AUTO_INCREMENT属性を使うことで、新しい行に対して自動的に一意の番号(識別子)を割り当てることができます。本記事では、AUTO_INCREMENT列の基本的な使い方、動作の仕組み、そして利用時に守るべきルールについて、実例とともにわかりやすく解説します。基本的な使い方まずは、以下のクエリを見てみましょう。テーブルを作成し、データを挿入した結果を確認します。クエリ例CREATE TABLE tableName ( id MEDIUMINT NOT NULL AUTO_INCREMENT,