В MySQL, как написать запрос INSERT-INTO-VALUES, чтобы его можно было молча отбросить, если запись с таким же значением первичного ключа уже существует?

0

Мне нужно импортировать большой набор записей, которые могут содержать дубликаты. Таблица представляет собой таблицу MyISAM с составным первичным ключом и внешними ключами. Как указать, что если комбинация значений первичного ключа вставляемой записи уже существует в таблице, она просто отбросит конкретную вставку, не выдавая ошибку или не вставляя дубликат?

Теги:

2 ответа

1
Лучший ответ

Вы можете использовать ключевое слово IGNORE в INSERT s:

Если вы используете ключевое слово IGNORE, ошибки, возникающие при выполнении инструкции INSERT, рассматриваются как предупреждения. Например, без IGNORE строка, которая дублирует существующий индекс UNIQUE или PRIMARY KEY в таблице, вызывает ошибку с дубликат-ключом, и оператор прерывается. С IGNORE строка все еще не вставлена, но ошибка не выдана. (Источник)

Пример:

CREATE TABLE my_table (
   id int, name varchar(10), value int, PRIMARY KEY (id, name)
);
Query OK, 0 rows affected (0.03 sec)

INSERT IGNORE INTO my_table (id, name, value) VALUES (1, 'a', 100),
                                                     (1, 'b', 200),
                                                     (1, 'b', 300);
Query OK, 2 rows affected (0.00 sec)
Records: 3  Duplicates: 1  Warnings: 0

SELECT * FROM my_table;
+----+------+-------+
| id | name | value |
+----+------+-------+
|  1 | a    |   100 |
|  1 | b    |   200 |
+----+------+-------+
2 rows in set (0.00 sec)
1

Вам нужно использовать ключевое слово IGNORE:

INSERT IGNORE INTO ...

или

LOAD DATA INFILE ... IGNORE ...

Подробнее о том, как использовать последний, можно найти здесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню