Страницы

Поиск по вопросам

среда, 27 февраля 2019 г.

Как сделать sql-запрос так, чтобы он добавил только те элементы, которых нет в БД?

Допустим, мне нужно добавить в таблицу term массив слов, которые, возможно, уже есть там.
Можно сделать так - вынуть все значения из term, найти разницу между массивом слов из БД и массивом, который нужно добавить, после чего закинуть в БД результирующий массив, но хочется добавить нужные значения за один запрос.
Можно как-то сделать это?


Ответ

Вам надо объявить уникальный индекс или сделать первичным ключем поле со "словом", чтобы гарантировать, что дубликат не будет создан даже при сбое в скрипте. Затем, в зависимости от контекста задачи, вы можете выбрать:
INSERT IGNORE - не-добавление того, что не должно быть добавлено. если вставляете пачкой несколько строк, IGNORE спасет от отмены всей операции; INSERT ON DUPLICATE KEY UPDATE - при обнаружении дубля, сработает "запасной вариант" с обновлением только того, что укажете; REPLACE - фактически делает DELETE и затем INSERT.
Cмотрите: https://stackoverflow.com/questions/548541/insert-ignore-vs-insert-on-duplicate-key-update

Комментариев нет:

Отправить комментарий