您好我正在使用 mysql5 innoDB 数据库。我想从父行及其相关子表数据中强制删除数据。我怎样才能做到这一点。任何人都可以帮助我。
3 回答
如果您使用 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 表。
连续两次删除就可以了:
delete from ChildTable where ParentID = ?
delete from ParentTable where ID = ?
如果您使用外键约束,那么您可以在创建子表时使用删除级联子句从父表中删除一行,然后它也会从子表中删除相应的主键行。
如果您只想从父表中删除行而不是从子表中删除相应的主键行,则在创建子表时使用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)。
:) :):) :):) :):) :):) :)