数据库
首页 > 数据库> > mysql – 如何从表sql中删除行

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