在定义on delete restrict时,是否有任何方法可以使用查询在特定的基础上使用on delete cascade特性?

q3aa0525  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(226)

我已将外键创建为 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';
dly7yett

dly7yett1#

不,如果没有使用on delete cascade选项定义外键约束,则没有强制特殊级联删除的语法。
尽管@raymondnijland在注解中给出了建议,但在join中对两个表执行delete操作在mysql中是行不通的。
使用MySQL5.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`))

您必须对每个子表执行单独的delete,然后对父表执行delete。

相关问题