Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
приветствую
народ, такой вот вопрос возник, в мануале и гугле не нашёл, собственно что нужно:
Мы знаем, что если при вставке в таблицу, в инструкции insert указать ключевое слово ignore, то вставляемые записи, для которых не выполняется требование, например уникальности ключа, попросту не будут вставлены и mysql перейдёт к вставке новой записи.
Собственно, как добиться аналогичного поведения (без дополнительных выборок, триггеров и т. д.) для случая, когда между таблицами установлены отношения с внешними ключаеми, и вставляются сразу несколько строк т.е.:
master_tbl {id, val}
slave_tbl {master_id, descr}
и для slave_table задан ФК:
FOREIGN KEY (master_id) REFERENCES master_tbl (id) ON ...
Если мы вставляем в slave_tbl запись с master_id, для которого не выполняется условие по FK, то соответственно получаем ошибку "Cannot add or update a child row: a foreign key constraint fails..."
Имеется ли какой-то способ просто подавить возникновение этой ошибки и продолжить вставку со следуюшщей строки, в случае многострочного insert ? Например, первый блок:
Отредактированно outblaze (28.02.2011 15:33:26)
Неактивен
К сожалению, единственная синтаксическая конструкция — INSERT IGNORE.
Самый простой вариант решения, который я вижу, — использовать триггер,
который бы всем «плохим» записям ставил в сопоставление уже существу-
ющий primary key (чтобы они отваливались на IGNORE и при этом не убива-
ли весь запрос).
Неактивен
Страниц: 1