ユニーク制約などの違反時にもエラーを発生させずに終了

広告

テーブルの中のカラムにプライマリーキー制約やユニーク制約が設定されている場合に、データを追加すると制約違反となる場合があります。このような場合通常はエラーとなりますが、エラーを発生させずに終了させるにはIGNOREを指定します。

INSERT IGNORE INTO tbl_name (col_name1, col_name2, ...)
  VALUES (value1, value2, ...);

IGNOREを指定した場合、追加するデータでユニーク制約などの違反があった場合にもエラーを発生させません。ただしその場合でもデータの追加は行われません。

では実際に試してみます。次のようなテーブルを作成しました。

mysql> create table personal(id int unique, name varchar(20));

p4-1

「id」カラムにはユニーク制約が設定してありますので、重複した値を持つことはできません。

データをいくつか追加しておきます。

p4-2

ではまずIGNOREを付けずにユニーク制約の違反となるようなデータを追加してみます。

p4-3

ユニーク制約に違反しているためエラーが発生しました。

今度はIGNOREを付けてINSERT文を実行してみます。

mysql> insert ignore into personal values (2, '堀部');

p4-4

このようにエラーを出さずに終了しました。ただエラーが発生していないだけでデータは追加されていません。実際にテーブルからデータを取得してみても次のように変更ないことが確認できます。

p4-5

( Written by Tatsuo Ikura )