Есть ли способ использовать функцию ON DELETE CASCADE в режиме adhoc, используя запрос, когда определено ON DELETE RESTRICT? - PullRequest
0 голосов
/ 25 декабря 2018

Я создал внешний ключ как ON DELETE RESTRICT, но иногда мне нужно удалить дочерние записи вместе с удалением родительской записи.Я не могу использовать «ON DELETE CASCADE», потому что мне нужно это ограничение чаще.Так есть ли способ изменить поведение внешнего ключа во время выполнения, используя любое ключевое слово или что-то в запросе, как показано ниже?

delete * from table1 where ID='3' CASCADE CHILD;

или

delete * from table1 where ID='3' SET foreign_key_behavior= 'ON DELETE CASCADE';

1 Ответ

0 голосов
/ 25 декабря 2018

Нет, синтаксис принудительного принудительного удаления не существует, если вы не определили ограничение внешнего ключа с помощью опции ON DELETE CASCADE.

Выполнение DELETE для обеих таблиц в объединении неработать в MySQL, несмотря на предложение @RaymondNijland в комментариях.

Демонстрация с использованием MySQL 5.6:

mysql> create table foo ( id serial primary key );
mysql> create table bar (foo_id bigint unsigned not null, 
  foreign key (foo_id) references foo(id));
mysql> insert into foo values (1);
mysql> insert into bar values (1);
mysql> delete foo.*, bar.* from foo join bar on foo.id=bar.foo_id where foo.id=1;

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint
fails (`test`.`bar`, CONSTRAINT `bar_ibfk_1` FOREIGN KEY (`foo_id`) REFERENCES
`foo` (`id`))

Вам придется выполнить отдельное удаление для каждой дочерней таблицы, затемудалить для родительской таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...