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

【MySQL】UNIQUE KEYで重複レコード挿入時にエラーを表示する方法

MySQLで重複データの挿入を検出するには

MySQLのテーブルに重複したデータが挿入されるのを防ぎ、エラーとして検出したい場合は、UNIQUE KEY(ユニークキー)を使用します。ユニークキーを設定したカラムには同じ値を複数回挿入できず、重複データを挿入しようとすると自動的にエラーが発生します。

ここでは、従業員テーブルを例に、その手順を解説します。

1. テーブルを作成する

まず、サンプル用のテーブルを作成しましょう。

mysql> create table DemoTable1553
-> (
-> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName varchar(20),
-> EmployeeSalary int
-> );
Query OK, 0 rows affected (0.47 sec)

EmployeeIdは自動採番の主キー、EmployeeNameは氏名、EmployeeSalaryは給与を格納するカラムです。

2. ユニークキーを追加する

次に、ALTER TABLE文を使ってEmployeeSalaryカラムにユニークキーを設定します。

mysql> alter table DemoTable1553 add unique(EmployeeSalary);
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0

これで、同じ給与額を持つレコードはテーブルに存在できなくなります。

3. レコードを挿入して動作を確認する

INSERTコマンドでレコードを挿入します。4件目では、すでに登録済みの給与額「45000」を再度挿入しようとしているため、エラーが発生します。

mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Chris',45000);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('David',35000);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Sam',25000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Carol',45000);
ERROR 1062 (23000): Duplicate entry '45000' for key 'EmployeeSalary'

「ERROR 1062 (23000): Duplicate entry」というメッセージが表示されれば、重複データの挿入が正しくブロックされていることが確認できます。

4. テーブルの内容を確認する

SELECT文でテーブル内の全レコードを表示します。

mysql> select * from DemoTable1553;

実行結果は以下の通りです。

+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
| 1 | Chris | 45000 |
| 2 | David | 35000 |
| 3 | Sam | 25000 |
+------------+--------------+----------------+
3 rows in set (0.00 sec)

重複していた「Carol(45000)」のレコードは挿入されず、エラー発生前に登録された3件のみがテーブルに残っていることがわかります。

補足: エラーを回避したい場合

重複時にエラーとせず挿入をスキップしたい場合は「INSERT IGNORE」、既存レコードを更新したい場合は「ON DUPLICATE KEY UPDATE」を使用すると便利です。用途に応じて使い分けましょう。

  1. MySQLでテーブル内の重複レコードをすべて削除する方法

    MySQLのテーブルから重複レコードを削除したい場合、DELETEコマンドを使用します。この記事では、実際にテーブルを作成し、重複データを挿入したうえで、DELETE文を使って重複レコードを削除する手順を具体的に解説します。 1. テーブルの作成 まず、練習用のテーブル「DuplicateDeleteDemo」を作成しましょう。このテーブルは、id(整数型)とname(可変長文字列)の2つのカラムを持つシンプルな構造です。 mysql> create table DuplicateDeleteDemo -> ( -> id int, -> name

  2. JavaのPreparedStatementを使ってMySQLテーブルにレコードを挿入する方法

    JavaのPreparedStatementを使用してMySQLのテーブルにレコードを挿入するには、まずINSERT文の雛形を作成し、値の部分をプレースホルダー(?)で置き換えます。SQLインジェクション対策やパフォーマンス向上の観点からも、この方法は推奨されています。1. INSERT文の基本構文レコード挿入用のSQLは、以下のような構文で記述します。String anyVariableName = INSERT INTO yourTableName(yourColumnName1, yourColumnName2, yourColumnName3, ...N) + VALUES (?, ?