INSERT IGNORE
Игнорирование ошибок
Обычно INSERT останавливается и откатывает транзакцию при возникновении ошибки.
Использование ключевого слова IGNORE преобразует все ошибки в предупреждения, которые не остановят добавление последующих строк.
Некорректные значения изменяются на ближайшее допустимое значение и вставляются, при этом генерируется предупреждение.
Параметры IGNORE и DELAYED игнорируются при использовании ON DUPLICATE KEY UPDATE.
До MySQL и MariaDB 5.5.28 предупреждения не генерировались для ошибок дублирования ключей при использовании IGNORE. Вы можете получить старое поведение, установив OLD_MODE на NO_DUP_KEY_WARNINGS_WITH_IGNORE.
Полное описание эффектов см. в IGNORE.
Примеры
CREATE TABLE t1 (x INT UNIQUE); INSERT INTO t1 VALUES(1),(2); INSERT INTO t1 VALUES(2),(3); ERROR 1062 (23000): Duplicate entry '2' for key 'x' SELECT * FROM t1; +------+ | x | +------+ | 1 | | 2 | +------+ INSERT IGNORE INTO t1 VALUES(2),(3); Query OK, 1 row affected, 1 warning (0.04 sec) SHOW WARNINGS; +---------+------+---------------------------------+ | Level | Code | Message | +---------+------+---------------------------------+ | Warning | 1062 | Duplicate entry '2' for key 'x' | +---------+------+---------------------------------+ SELECT * FROM t1; +------+ | x | +------+ | 1 | | 2 | | 3 | +------+
Преобразование значений:
CREATE OR REPLACE TABLE t2(id INT, t VARCHAR(2) NOT NULL, n INT NOT NULL); INSERT INTO t2(id) VALUES (1),(2); ERROR 1364 (HY000): Field 't' doesn't have a default value INSERT IGNORE INTO t2(id) VALUES (1),(2); Query OK, 2 rows affected, 2 warnings (0.026 sec) Records: 2 Duplicates: 0 Warnings: 2 SHOW WARNINGS; +---------+------+----------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------+ | Warning | 1364 | Field 't' doesn't have a default value | | Warning | 1364 | Field 'n' doesn't have a default value | +---------+------+----------------------------------------+ SELECT * FROM t2; +------+---+---+ | id | t | n | +------+---+---+ | 1 | | 0 | | 2 | | 0 | +------+---+---+
Дополнительные примеры использования синтаксиса см. в INSERT ON DUPLICATE KEY UPDATE.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/insert-ignore/