嗨,我使用的是mysql5 innoDB数据库。我想要从父行及其相关的子表数据中强制删除数据。我该怎么做呢?任何人都可以帮助我。
发布于 2011-08-26 15:38:21
如果你使用innodb,你可以使用外键约束进行级联删除,当你删除父行时,子行也会被删除。
查看更多http://dev.mysql.com/doc/refman/5.1/en/innodb-foreign-key-constraints.html
另一种方法是在delete中使用多表语法。看看http://dev.mysql.com/doc/refman/5.1/en/delete.html
最后一种方法是在删除操作之后使用触发器。看看http://dev.mysql.com/doc/refman/5.1/en/trigger-syntax.html
您还可以使用连续的delete语句,但在这种情况下,您应该使用transaction。注意:这个只适用于innodb表。
发布于 2011-08-26 15:41:53
一行中的两个删除操作就可以完成此操作:
delete from ChildTable where ParentID = ?
delete from ParentTable where ID = ?发布于 2011-08-26 18:35:09
如果您正在使用外键约束,那么您可以在创建子表时使用on delete cascade子句从父表中删除一行,然后它也会从子表中删除相应的主键行。
如果只想从父表中删除行,而不是从子表中删除相应的主键行,那么在创建子表时使用on delete cascade 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“子句。
如果您使用on delete cascade null,那么它将只从父表中删除行(2SAI)。
:):)
https://stackoverflow.com/questions/7201425
复制相似问题