Удаление mysql и ограничение внешнего ключа

Я удаляю выбранные строки из обеих таблиц в MYSQL, две таблицы имеют внешние ключи.

DELETE d,b
  FROM A as b
  INNER JOIN B as d on b.bid=d.bid WHERE b.name LIKE '%xxxx%';

MYSQL жалуется на внешние ключи, хотя я пытаюсь удалить из обеих таблиц:

Error: Cannot delete or update a parent row: a foreign key constraint
fails (`yyy/d`, CONSTRAINT `fk_d_bid` FOREIGN KEY (`bid`) REFERENCES 
`b` (`bid`) ON DELETE NO ACTION ON UPDATE NO ACTION)

какое лучшее решение для удаления из обеих таблиц?


person user121196    schedule 05.05.2010    source источник


Ответы (2)


Измените это ограничение, чтобы использовать ON DELETE CASCADE, что означает, что при удалении строки все «дочерние» строки также будут автоматически удалены.

Конечно, будьте осторожны с использованием CASCADE — используйте его только при необходимости. Если вы переусердствуете с этим и случайно сделаете удачный DELETE, это может привести к удалению половины вашей базы данных. :)

См. документацию по ограничениям внешнего ключа. .

person intgr    schedule 05.05.2010

Кажется, я вижу, что ты пытаешься сделать

Если вы не можете изменить структуру таблицы, вы можете использовать 2 оператора, первый с дополнительным выбором

удалить из B, где ставка IN (выбрать ставку из A, где имя, например, «%xxxx%»);

удалить из A, где имя типа «%xxxx%»;

person laher    schedule 05.05.2010
comment
отличная идея, но я понял, что вы не можете указать целевую таблицу «B» для обновления в предложении FROM - person user121196; 05.05.2010