2011-08-26 36 views

回答

6

如果您使用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表格。连续

0

两个删除会做的伎俩:如果您正在使用外键约束

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

这是如果表引擎不不支持'国外keys' – ty812

+0

所有表引擎的方法支持外键,我会使用触发器,这样我就不必考虑它了。 – Johan

0

,那么你可以删除梯级利用条款,同时创建一个子表从父删除行表,那么它也会从子表中删除相应的主键行。

如果要从父表中删除行,而不是从子表中删除对应的主键行,则在删除级联时使用null创建子表时的子句。

例如:创建一个名为“学生”父表和子表称为“库”

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”子句。

如果您正在使用删除级联null,则它将只从父表中删除行(2 Sai)。

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