请数据库高手写一个级联删除的SQL 语句!谢谢
我有一个父表:zyy_user;PK为id,其余字段为:real_name,birthday,email子表:zyy_manage_userPK也为id引用的父表id作F...
我有一个父表:zyy_user;PK为 id ,
其余字段为:real_name,birthday,email
子表:zyy_manage_user PK也为 id 引用的父表 id 作 FK,
其余字段:last_login_time,create_time
我想知道怎么才能删除父表的某一行记录 展开
其余字段为:real_name,birthday,email
子表:zyy_manage_user PK也为 id 引用的父表 id 作 FK,
其余字段:last_login_time,create_time
我想知道怎么才能删除父表的某一行记录 展开
3个回答
展开全部
用游标,做出的效果相当于级联删除,肯定不会有错。不知道符不符合您的要求。
declare cur_test Cursor
for (select id from zyy_user)
open cur_test
declare @praentId int
fetch next from cur_test into @parentId
while(@@fetch_status=0)
begin
delete from zyy_manage_user where id=@parentId--这行的id一定是字表的外键
delete from zyy_user where id=@parentId
fetch next from cur_test into @parentId
end
close cur_test
deallocate cur_test
最后说两句:
1.我在公司回答的问题,公司电脑很悲剧的没有数据库,我没能测试,如果我写错了。我很抱歉,给我信息,谢谢。
2.建议你设计字表,字表要有自己的主键,然后有自己外键,别设计成主键,和外键是同一个字段。
declare cur_test Cursor
for (select id from zyy_user)
open cur_test
declare @praentId int
fetch next from cur_test into @parentId
while(@@fetch_status=0)
begin
delete from zyy_manage_user where id=@parentId--这行的id一定是字表的外键
delete from zyy_user where id=@parentId
fetch next from cur_test into @parentId
end
close cur_test
deallocate cur_test
最后说两句:
1.我在公司回答的问题,公司电脑很悲剧的没有数据库,我没能测试,如果我写错了。我很抱歉,给我信息,谢谢。
2.建议你设计字表,字表要有自己的主键,然后有自己外键,别设计成主键,和外键是同一个字段。
追问
谢谢你,其实你说的很好,相信可以解决,我在努力尝试中。
你工作多久了?我刚进公司,就给我的一个任务,不许用hibernate,唉。
最后请问你,@praentId是不是方法传递进去的参数?就是id?
追答
我刚毕业。我也是刚开始工作。
@parentId 是我申明的一个变量,用于存储,主表中的Id。
大致的意思:
1.游标遍历主表中的每一行数据,同行,遍历一行,就存储一下,把主表的主键Id存储在@parentId中。
2.删除子表中外键Id=@parentId的数据
3.删除主表主键Id=@parentId的数据
我写的这个有一个BUG,要修改下,不然就把所有数据都删除掉了。
改成这样
declare cur_test Cursor
for (select id from zyy_user where 条件)
就是,你想删除,主表中的那条数据,所关联的子表数据(不知道是不是说的有点绕)
说到这里,其实该把上面这些代码都放在一个存储过程里面,这个存储过程有一个输入参数。
代码如下:
create proc proc_test
@Id --你想删除的主表数据的主键(Id)号
as
declare cur_test Cursor
for (select id from zyy_user where id=@Id)
open cur_test
declare @praentId int
fetch next from cur_test into @parentId
while(@@fetch_status=0)
begin
delete from zyy_manage_user where id=@parentId--这行的id一定是字表的外键
delete from zyy_user where id=@parentId
fetch next from cur_test into @parentId
end
close cur_test
deallocate cur_test
begin
end
hibernate,我个人也很不喜欢,性能真的很低。我的老师,以前说过这样一句话,改变了我对数据库的看法。
“不要什么事,都放在代码里做。数据库能做很多事,你不充分利用它,那你还用什么数据库?”
展开全部
删除父表时先判断子表是否有数据引用。。
追问
除了外键关联,没有其他属性的引用。您能帮我写出这个sql吗?
追答
你想一句sql搞定。不好搞、你删除父表有父表的id,你根据这个id去查这个外键关联。得到子表的id
删除子表数据、然后在删除父表数据、就这样了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先删除子表记录,在删除父表记录
追问
请问,你的意思是说写2个sql?难道不能用一个 sql 语句解决吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |