2011-08-26 23 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)。

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