MySQLテーブルに重複しない値を挿入する方法(UNIQUE制約の使い方)
MySQLのテーブルに重複する値の挿入を防ぎたい場合、UNIQUE制約を使用します。UNIQUE制約を設定したカラムには、同じ値(または同じ組み合わせの値)を2回以上登録できず、重複データの混入を自動的に防止できます。
1. UNIQUE制約付きテーブルを作成する
まず、FirstNameとLastNameの組み合わせが重複しないようにUNIQUE制約を設定したテーブルを作成します。
mysql> create table DemoTable832(
FirstName varchar(100),
LastName varchar(100),
UNIQUE(FirstName,LastName)
);
Query OK, 0 rows affected (0.87 sec)
この例では、単一カラムではなく複数カラムにまたがる複合UNIQUE制約を指定しています。これにより、「FirstNameとLastNameの組み合わせ」が完全に一致するレコードのみが拒否されます。
2. レコードを挿入して動作を確認する
INSERT文を使って、いくつかのレコードをテーブルに挿入してみましょう。
mysql> insert into DemoTable832 values('John','Smith');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable832 values('Adam','Smith');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable832 values('John','Doe');
Query OK, 1 row affected (0.33 sec)
mysql> insert into DemoTable832 values('John','Smith');
ERROR 1062 (23000): Duplicate entry 'John-Smith' for key 'FirstName'
最初の3件は問題なく挿入されました。しかし4件目の「John / Smith」は、すでに存在する「John / Smith」と完全に一致するため、ERROR 1062(重複エントリーエラー)が発生し、挿入が拒否されています。
なお、姓だけが同じ「Adam / Smith」や、名だけが同じ「John / Doe」は正常に登録されている点に注目してください。複合UNIQUE制約では、指定した全カラムの値がすべて一致した場合のみ重複とみなされます。
3. テーブルの内容を確認する
SELECT文でテーブル内の全レコードを表示します。
mysql> select *from DemoTable832;
実行結果は以下の通りです。
+-----------+----------+ | FirstName | LastName | +-----------+----------+ | Adam | Smith | | John | Doe | | John | Smith | +-----------+----------+ 3 rows in set (0.00 sec)
重複しようとした「John / Smith」は登録されておらず、ユニークな3件のレコードだけが保存されていることが確認できます。
まとめ
- UNIQUE制約を付与すると、そのカラム(またはカラムの組み合わせ)に重複した値を挿入できなくなります。
- 重複データを挿入しようとすると、ERROR 1062 (23000): Duplicate entry というエラーが返されます。
- 複数カラムを指定した場合(複合UNIQUE制約)、すべてのカラムの値が一致したときのみ重複と判定されます。
- メールアドレスやユーザーIDなど、一意性が求められるデータの保護に非常に有効です。
-
Javaを使ってMySQLテーブルにレコードを挿入する方法
はじめに本記事では、JavaのJDBC(Java Database Connectivity)を使用して、MySQLデータベースのテーブルにレコードを挿入する手順を解説します。まずテーブルを作成し、その後Javaプログラムからデータを登録するまでの一連の流れを見ていきましょう。1. MySQLでテーブルを作成するまず、データを挿入するためのテーブルを作成します。以下はMySQLでテーブルを作成するクエリです。mysql> create table DemoTable( Id int, Name varchar(30),&
-
MySQLストアドプロシージャでテーブルにデータを挿入する方法
MySQLのストアドプロシージャを使ってテーブルにデータを挿入するには、以下のような構文を使用します。create procedure yourProcedureName(OptionalParameter) begin insert into yourTableName() values(yourValue1,yourValue2,...N); endサンプルテーブルの作成まずは、この構文を実際に理解するために、テスト用のテーブルを作成してみましょう。mysql> create table DemoTable1928 ( Id int NOT NULL