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

MySQLでINSERT時の重複データを防ぐ方法|UNIQUE INDEXとINSERT IGNOREの使い方

MySQLでINSERTを実行した際に、同じ内容のデータが重複して登録されるのを防ぎたい場合は、UNIQUEインデックスを活用するのが効果的です。この記事では、テーブル作成から重複防止の設定、実際の動作確認まで、サンプルコードとともに順を追って解説します。

UNIQUEインデックスとは

UNIQUEインデックスを設定したカラム(またはカラムの組み合わせ)には、同一の値を持つレコードを登録できなくなります。単一カラムだけでなく、複数カラムの組み合わせに対しても、次の構文で一度に設定できます。

alter table yourTableName ADD UNIQUE INDEX(yourColumnName1, yourColumnName2,....N);

サンプルテーブルを作成する

まず、動作確認用のテーブルを作成しましょう。

mysql> create table DemoTable
-> (
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (0.55 sec)

ユニークインデックスを追加する

続いて、Value1とValue2の2つのカラムに対してユニークインデックスを追加します。これにより、この2つの値の組み合わせが完全に一致するレコードは登録できなくなります。

mysql> alter table DemoTable ADD UNIQUE INDEX(Value1, Value2);
Query OK, 0 rows affected (0.54 sec)
Records: 0 Duplicates: 0 Warnings: 0

INSERT IGNOREでレコードを挿入する

ここが最も重要なポイントです。レコードの挿入には、通常のINSERTではなくINSERT IGNOREを使用してください。

INSERT IGNOREの動作

  • 重複しない場合: 既存のレコードと重複していなければ、通常どおり挿入されます。
  • 重複する場合: IGNOREキーワードにより、エラーを発生させることなくそのレコードを黙って破棄します。

それでは、同じ値(10, 20)をあえて2回挿入してみましょう。

mysql> insert ignore into DemoTable values(10,20);
Query OK, 1 row affected (0.14 sec)

mysql> insert ignore into DemoTable values(10,20);
Query OK, 0 rows affected, 1 warning (0.10 sec)

2回目のINSERTでは「0 rows affected」と表示され、重複レコードが無視されたことがわかります。エラーも発生せず、処理が中断されない点がINSERT IGNOREの利点です。

挿入結果を確認する

SELECT文でテーブル内の全レコードを表示し、結果を確認しましょう。

mysql> select *from DemoTable;

出力結果

+--------+--------+
| Value1 | Value2 |
+--------+--------+
| 10 | 20 |
+--------+--------+
1 row in set (0.00 sec)

このように、INSERT IGNOREを2回実行しても、テーブルには最初の1件しか登録されていません。UNIQUEインデックスとINSERT IGNOREを組み合わせれば、アプリケーション側で存在チェックを行わなくても、データベースレベルで重複データの登録を確実に防ぐことができます。

  1. MySQLテーブルにJSONデータを挿入する方法

    MySQLでは、JSON型のカラムを作成することで、構造化されたデータをそのまま保存できます。ここでは、JSON型カラムを持つテーブルを作成し、実際にデータを挿入・取得する手順を解説します。 1. JSON型カラムを持つテーブルを作成する まず、JSON型のカラム「ListOfNames」を持つテーブルを作成します。 mysql> create table DemoTable1832     (     ListOfNames JSON     ); Query OK,

  2. MySQLでテーブルが存在するかどうかを確認する方法【INFORMATION_SCHEMA.TABLES活用】

    MySQLでテーブルの存在を確認するにはMySQLにおいて、特定のテーブルがデータベース内に存在するかどうかを確認したい場合、INFORMATION_SCHEMA.TABLES を利用するのが一般的な方法です。このシステムビューには、サーバー上のすべてのデータベースとテーブルに関するメタデータが格納されており、これを参照することで目的のテーブルが存在するかを簡単に調べられます。基本構文テーブルの存在確認は、以下のようなSELECT文で行います。select table_name from information_schema.tables where table_schema=database