Spec-Zone.ru › MariaDB

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.

См. также

  • INSERT
  • INSERT DELAYED
  • INSERT SELECT
  • HIGH_PRIORITY и LOW_PRIORITY
  • Конкурентные вставки
  • INSERT - Значения по умолчанию и дубликаты
  • INSERT ON DUPLICATE KEY UPDATE
Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержание не предварительно проверяется MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API