请数据库高手写一个级联删除的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

我想知道怎么才能删除父表的某一行记录
展开
 我来答
handangaoyang
2011-05-11 · TA获得超过2242个赞
知道大有可为答主
回答量:2633
采纳率:88%
帮助的人:891万
展开全部
用游标,做出的效果相当于级联删除,肯定不会有错。不知道符不符合您的要求。

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,我个人也很不喜欢,性能真的很低。我的老师,以前说过这样一句话,改变了我对数据库的看法。
“不要什么事,都放在代码里做。数据库能做很多事,你不充分利用它,那你还用什么数据库?”
zuolangguo
2011-05-11 · TA获得超过110个赞
知道答主
回答量:226
采纳率:0%
帮助的人:138万
展开全部
删除父表时先判断子表是否有数据引用。。
追问
除了外键关联,没有其他属性的引用。您能帮我写出这个sql吗?
追答
你想一句sql搞定。不好搞、你删除父表有父表的id,你根据这个id去查这个外键关联。得到子表的id
删除子表数据、然后在删除父表数据、就这样了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
华夏日长兴
2011-05-11 · TA获得超过9592个赞
知道大有可为答主
回答量:6305
采纳率:85%
帮助的人:3663万
展开全部
先删除子表记录,在删除父表记录
追问
请问,你的意思是说写2个sql?难道不能用一个 sql 语句解决吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式