1

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

4

3 回答 3

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 表。

于 2011-08-26T07:38:21.150 回答
0

连续两次删除就可以了:

delete from ChildTable where ParentID = ?
delete from ParentTable where ID = ?
于 2011-08-26T07:41:53.297 回答
0

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

如果您只想从父表中删除行而不是从子表中删除相应的主键行,则在创建子表时使用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”子句。

假设如果您使用删除级联空值,那么它将仅从父表中删除行(2 Sai)。

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

于 2011-08-26T10:35:08.933 回答