如何从mysql5中的父表中删除数据?

Posted

技术标签:

【中文标题】如何从mysql5中的父表中删除数据?【英文标题】:How to delete data from parent table in mysql5? 【发布时间】:2011-11-04 07:27:55 【问题描述】:

您好,我正在使用 mysql5 innoDB 数据库。我想从父行及其相关子表数据中强制删除数据。我怎样才能做到这一点。任何人都可以帮助我。

【问题讨论】:

【参考方案1】:

如果您使用 innodb,则可以在删除父行时使用 FOREIGN KEY CONSTRAINTS 进行级联删除,子行也将被删除。

查看更多http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html

另一种方法是在删除中使用多表语法。 看http://dev.mysql.com/doc/refman/5.1/en/delete.html

最后的方法是在删除操作后使用触发器。 看http://dev.mysql.com/doc/refman/5.1/en/trigger-syntax.html

您也可以使用顺序删除语句,但在这种情况下您应该使用事务。注意:这个只适用于 innodb 表。

【讨论】:

【参考方案2】:

连续两次删除就可以了:

delete from ChildTable where ParentID = ?
delete from ParentTable where ID = ?

【讨论】:

这是所有不支持foreign keys的表引擎的方法 如果表引擎不支持外键,我会使用触发器,这样我就不用考虑了。【参考方案3】:

如果您使用外键约束,那么您可以在创建子表时使用 on delete cascade 子句从父表中删除一行,然后从子表中删除相应的主键行表也​​。

如果您只想从父表中删除行而不是从子表中删除相应的主键行,则在创建子表时使用 on delete cascade null 子句。

例如:创建一个名为“student”的父表和一个名为“library”的子表

create table student(sno integer(5) primary key,sname varchar(20));

insert into student values(1,"suman");
insert into student values(2,"sai"); 
insert into student values(3,"saaaa");

create table library(sno integer(5) references primary key(sno) on delete cascade,book_name varchar(20));

insert into student values(1,"c");
insert into student values(2,"JAVA");
insert into student values(3,"ORACLE");

现在从父表中删除第二行

delete from student where sno=2;

然后它将从子表中删除相应的行(2 JAVA)。因为您只使用“on delete cascade”子句。

假设如果您使用 on delete cascade null 那么它将仅从父表中删除行 (2 Sai)。

:) :):) :):) :):) :):) :)

【讨论】:

以上是关于如何从mysql5中的父表中删除数据?的主要内容,如果未能解决你的问题,请参考以下文章

我如何修改我的 Sql server 2008 r2 FK 的父表

Oracle表中添加外键约束

Oracle表中添加外键约束

如何将子表值与父表行关联并插入子表值对应于php中的父表行

从父表和子表中删除行

mysql数据库外键删除更新规则