mysql – 如何从表sql中删除行
作者:互联网
我想删除8个表中的特定行.
我的问题是行与外键连接.
如何删除连接到我要删除的特定行的所有数据?
我的表包括定义表(如id,name,max value,min value …),
数据表(如id,user_id,definition_id,….)和历史表(保存数据表中的每个更改).
我想在cascade命令上使用delete但我找不到使用它的方法.
解决方法:
DELETE CASCADE是外键约束的一个属性.不幸的是,这不是你可以用作DELETE语句的选项(实际上真的很酷)
如果您的外键未被声明为级联,则需要“按照自己的方式工作”.
不幸的是你没有告诉我们你真正的表结构所以我们假设这样的事情:
main_table (main_id) child_one (id, main_id) child_two (id, id_one) child_three (id, id_two)
(我知道你说了8张表,但是为了演示我缩短了一点,但这并没有改变潜在的“策略”)
假设您要从`main_table删除main_id = 42的行:
首先需要使用以下内容从child_three中删除行:
delete from child_three
where id_two in (select id
from child_two
where id_one in (select id
from child_one
where main_id = 42);
然后从child_two中删除行:
delete from child_two
where id_one in (select id
from child_one
where main_id = 42);
然后child_one:
delete from child_one
where main_id = 42;
最后主表:
delete from main_table
where id = 42;
有些SQL客户端实际上可以为您生成这些语句.我不知道SQL Developer是否可以.
标签:sql,mysql,oracle-sqldeveloper 来源: https://codeday.me/bug/20190901/1786943.html