MySQL: 挿入は無視され、重複データは自動的に無視されます

MySQL にデータを挿入するとき、挿入されたデータがテーブルにすでに存在する (主キーまたは一意のキーがすでに存在する) 場合は、挿入無視構文を使用して重複データの挿入を無視します。

1.挿入無視構文

insert ignore into table_name values

挿入無視構文を使用してデータを挿入するときに、主キーまたは一意キーの競合が発生すると、挿入されたデータは無視されます。

次のいずれかの条件を満たします。

重複する主キー
重複する一意のキー
2. 大文字と小文字を無視して挿入する
まずテーブル、table_name、主キー ID、一意のキー名を確認します。具体的なテーブル構造とテーブル内のデータは次のとおりです。

 CREATE TABLE table_name(
  id int(11) NOT NULL,
  name varchar(50) DEFAULT NULL,
  age int(11) DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE KEY uk_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> select * from table_name;
+----+------+------+
| id | name | age  |
+----+------+------+
|  1 | Tom  |   20 |
+----+------+------+

2.1 主キーの競合
ID 1 のレコードを挿入します。ignore が追加されていない場合は、次のように主キーの競合エラーが報告されます。

mysql> insert into table_name values(1,’Bill’, 21);
ERROR 1062 (23000): Duplicate entry ‘1for keyPRIMARY

無視を追加すると、エラーは報告されませんが、次のような警告が表示されます。

mysql> insert ignore into table_name values(1,’Bill’, 21);
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> show warnings;
+———+——+—————————————+
| Level   | Code | Message                               |
+———+——+—————————————+
| Warning | 1062 | Duplicate entry ‘1for keyPRIMARY|
+———+——+—————————————+

テーブルをクエリすると、挿入されたデータが無視されたことがわかります。

mysql> select * from table_name;
+-+——+——+
| id | name | age  |
+-+——+——+
|  1 | Tom  |   20 |
+-+——+——+

2.2 一意のキーの競合
同様に、以下に示すように、一意のキーが競合するデータの挿入も無視されます。

mysql> insert into table_name values(2,’Tom’,21);
ERROR 1062 (23000): Duplicate entry ‘Tom’ for key ‘uk_name’

mysql> insert ignore into table_name values(2,’Tom’,21);
Query OK, 0 rows affected, 1 warning (0.00 sec)

ビジネス ロジックが重複データの挿入時に自動的に無視する必要がある場合は、MySQL の挿入無視機能を試してみるとよいでしょう。

おすすめ

転載: blog.csdn.net/qq_41848006/article/details/128274196