如何从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中的父表中删除数据?的主要内容,如果未能解决你的问题,请参考以下文章