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

MySQLでINSERT IGNOREを使わずに重複する値を挿入した場合にエラーを表示する方法

はじめに

MySQLでは、INSERT IGNOREステートメントを使用せずに、UNIQUEインデックスやPRIMARY KEYと重複する値をテーブルに挿入しようとすると、重複キーエラーが発生し、ステートメントが中断されます。本記事では、その実際の動作を例を用いて確認していきます。

テーブルの作成

まず、サンプルとなるテーブルを作成しましょう。

mysql> create table DemoTable
(   FirstName varchar(100)
);
Query OK, 0 rows affected (0.58 sec)

MySQL公式ドキュメントには、「IGNORE を指定しない場合、テーブル内の既存の UNIQUE インデックスまたは PRIMARY KEY 値と重複する行は重複キーエラーを引き起こし、ステートメントは中止される」と記載されています。

ユニークインデックスの追加

そこで、次にFirstNameカラムに対してユニークインデックスを追加します。

mysql> alter table DemoTable add unique index(FirstName);
Query OK, 0 rows affected (0.50 sec)
Records: 0  Duplicates: 0  Warnings: 0

レコードの挿入とエラーの確認

INSERTコマンドを使ってテーブルにいくつかのレコードを挿入してみましょう。ここではINSERT IGNOREを使用していないため、重複するレコードを挿入しようとした時点でエラーが表示されます。

mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.32 sec)

mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.09 sec)

mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.15 sec)

mysql> insert into DemoTable values('Robert');
ERROR 1062 (23000): Duplicate entry 'Robert' for key 'FirstName'

mysql> insert into DemoTable values('Chris');
ERROR 1062 (23000): Duplicate entry 'Chris' for key 'FirstName'

mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.12 sec)

このように、「Robert」と「Chris」を再度挿入しようとした際に、ERROR 1062 (23000): Duplicate entry という重複キーエラーが発生し、挿入が拒否されていることがわかります。

結果の確認

SELECT文を使って、テーブル内のすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

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

+-----------+
| FirstName |
+-----------+
| Chris     |
| David     |
| Robert    |
| Sam       |
+-----------+
4 rows in set (0.00 sec)

まとめ

INSERT IGNOREを使用しない場合、ユニークインデックスやPRIMARY KEYと重複する値を挿入しようとするとエラーが発生し、その行は挿入されません。一方、INSERT IGNOREを使用すればエラーを無視して処理を継続できます。データの整合性を保ちたい場合は、適切にユニーク制約を設定し、重複チェックの仕組みを活用することが重要です。

  1. MySQLテーブルで先頭ゼロ付きの値を選択して挿入する方法

    MySQLで連番に先頭ゼロ(先行ゼロ)を付けた値をテーブルに挿入したい場合は、INSERT INTO SELECT文とLPAD()関数を組み合わせることで実現できます。LPAD()は文字列を指定した長さまで左側を特定の文字で埋める関数で、これを使えば「001」「002」のような形式のIDを簡単に生成できます。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1967 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserId varchar(20)

  2. Javaを使用してMySQLテーブルの値を表示する方法

    MySQLデータベースのテーブル値をJavaで表示するには、ResultSetの概念を利用します。データベースへの接続には、MySQL JDBCドライバーを使用します。テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table demo87    -> (    -> name varchar(20),    -> age int    -> )