社区
Web 开发
帖子详情
数据库表级联删除的问题
xingqiliudehuanghun
2009-11-20 09:35:49
项目中遇到一个问题,我负责开发的模块与7张表有关,彼此有主外键关系,
但没有设置级联更新和级联删除。而我现在恰恰需要实现多张表之间的级联
删除功能,除了改动数据库有没有别的办法来实现?大家给些建议。改动数据
库表估计不大可能,我们的DBA一向不设置级联删除,不知道这是为什么,我
没发现这样有什么好处。
...全文
1966
34
打赏
收藏
数据库表级联删除的问题
项目中遇到一个问题,我负责开发的模块与7张表有关,彼此有主外键关系, 但没有设置级联更新和级联删除。而我现在恰恰需要实现多张表之间的级联 删除功能,除了改动数据库有没有别的办法来实现?大家给些建议。改动数据 库表估计不大可能,我们的DBA一向不设置级联删除,不知道这是为什么,我 没发现这样有什么好处。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
34 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tuoluofo
2010-07-21
打赏
举报
回复
32楼太天真了。
数据库设计的再好,也比过换了一个系统维护人员,他如果不知道有级联删除,误删了数据,造成你公司系统停止运行3小时,公司收入减少20万,谁来负责啊。是你,还是新来的?
我觉得不应该新来的负责,而是你的思想负责。
外键可以建,但绝对不要有级联删除,折中的办法,那就是假删除。
NeverGiveUp2016
2009-11-26
打赏
举报
回复
[Quote=引用 3 楼 heyi10011 的回复:]
先删关联表,再删被关联表,,,回答完毕
[/Quote]
up !
xingqiliudehuanghun
2009-11-26
打赏
举报
回复
一一看了大家的回帖,几乎大家都不赞成使用级联删除.原因不外乎两种:
1.处于性能考虑
2.怕误删数据.
性能这方面不做讨论因为本人不是DBA对数据库的知识仅限于写一些SQL
完成开发任务。至于怕误删数据,我觉得这一点是多少有些站不住脚的。
如果数据库设计的好的话怎么会误删呢?如果从数据库的结构上就不能
保证数据的完整性,那么多的水平各异的开发人员靠他们的自律就可以吗?
保证数据结构的完整性本来就是数据库系统应该负责也有能力负责的。
我觉得DBA不愿意给数据库做级联删除不排除有DBA想偷懒的成分,所以
他把工作分摊到了开发人员的头上,当然责任也随之转嫁了过去。
但是我也要重申一点就是我虽然赞成使用级联删除但并不鼓励无限制的
滥用,毕竟一个大的系统表的个数是上百的,对这样大规模的数据做级联
删除的话确实是可怕的,造成误删的可能性确实很高。但是大的系统肯定是
分模块的,这些模块所涉及的数据是有一定的自治性的。到了模块这一层
表的个数就没那么多了,而且其复杂度也降下来了。对于这样小范围内的
数据做级联删除,我认为是完全可控的,也有必要做的。
对于广大的开发人员来说,好多时候,数据库设计和架构都是没有太多
发言权的。设计上的一些很不起眼的地方很可能造成很大开发工作量。如果
在一个小的公司,项目进度比较紧,表的结构变来变去,为了维护数据的完整
性,他们的代码中这一部分也要变来变去,这个工作实在是很让人抓狂的。
阿士匹灵
2009-11-26
打赏
举报
回复
路过
呵呵
william548934
2009-11-26
打赏
举报
回复
触发器
或者存储过程
或者先删从表再删主表
hbwhwang
2009-11-25
打赏
举报
回复
级联删除不好,容易误删除。还是用程序自己控制比较好,先删从表,再删主表。
youjianbo_han_87
2009-11-25
打赏
举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
DBA 当然不会设置级联了,甚至连表的外键一般都不会设置的。
建议不要使用 CASCADE,这个会把程序弄得很混乱,同意楼上的
[/Quote]
和缓存,lazy 并列 三大 Hibernate 类似的 ORM 工具 双刃剑。
zl3450341
2009-11-25
打赏
举报
回复
[Quote=引用 9 楼 xingqiliudehuanghun 的回复:]
如果只有两层也就罢了,问题是一共7个表最多的药级联四层!
而且很遗憾我们没有使用hibenate,刚才跟DBA沟通过了他也不
同意用trigger和级联,让我自己写SQL,去维护这些表之间
的数据完整性,我要自己去实现数据库中已经提供的功能。
[/Quote]
楼主杯具 呵呵
good luck
forget_kiss
2009-11-25
打赏
举报
回复
先删关联表,再删被关联表,,,回答完毕
xuexijava
2009-11-25
打赏
举报
回复
关注
心随莎动
2009-11-25
打赏
举报
回复
那就先删除从表,再删除主表了,层层递进了
feitianya
2009-11-25
打赏
举报
回复
一般为了约束性级联都不建的,
以前就是手动写SQL。很是麻烦的。
希望能有好的解决办法
xingqiliudehuanghun
2009-11-25
打赏
举报
回复
自己写了3个类:TableInfo、TableRelationCfg 、DataBaseUtil 将这个问题解决了。
在TableRelationCfg中手动配置表之间的关系便可实现级联删除.
这个重复的轮子造的是在是没有什么意义,但我对项目的架构和数据库设计都没有发言
权,我不能因为自己的这点不便去要求项目使用hibenate或者要求dba加trigger或设置级联
删除。唯一能做的只是按要求完成自己的任务.
火龙果被占用了
2009-11-25
打赏
举报
回复
[Quote=引用 17 楼 hbwhwang 的回复:]
级联删除不好,容易误删除。还是用程序自己控制比较好,先删从表,再删主表。
[/Quote]
同意!
长公子冰
2009-11-25
打赏
举报
回复
看来以上的所有回帖,发现这已经是一个“心照不宣”的开发规矩了,不设置级联。
我们的项目中也是,不过我们是小公司,没有什么DBA,表都有我来操作,不过我也不设置级联,都是先删除关联再删主,就怕级联删除误删,那你将欲哭无泪啊!
数据库设计时,建立外键还是一个好习惯的,像有一楼说的连外键都不设置,为了开发自由,我想有一天你遇到问题,你找错都找不到,就因为数据不完整。设计数据库起码要符合范式吧!
yerui627
2009-11-25
打赏
举报
回复
学习
ABAP1314
2009-11-25
打赏
举报
回复
没得说了··都被说光了 ···
crazylaa
2009-11-25
打赏
举报
回复
[Quote=引用楼主 xingqiliudehuanghun 的回复:]
项目中遇到一个问题,我负责开发的模块与7张表有关,彼此有主外键关系,
但没有设置级联更新和级联删除。而我现在恰恰需要实现多张表之间的级联
删除功能,除了改动数据库有没有别的办法来实现?大家给些建议。改动数据
库表估计不大可能,我们的DBA一向不设置级联删除,不知道这是为什么,我
没发现这样有什么好处。
[/Quote]
一般都不设cascade或FK的,否则很容易把数据给误删了。
而且设置某些约束可能造成开发上的不方便,有的也会影响数据库插入或修改时的性能。
有些约束本来就是应该在操作数据库之前就校验好的,否则数据库压力太大也不是什么好事。
还是觉得用代码控制较好。
crazylaa
2009-11-25
打赏
举报
回复
[Quote=引用 23 楼 xingqiliudehuanghun 的回复:]
维护下就知道其中的苦处了。现在这个模块才8张表,最多的级联了4层,下周这个模块要扩展
又要加4张表,哎
[/Quote]
楼主,用存储过程来实现级联删除吧,要么全删要么全不删,也不存在代码中控制事务的问题了。。以后的事情加表就是改存储过程了。。。
你们的DBA不会连存储过程也不让你加吧?那也太。。。。
辛苦啊,帮顶了。
xingqiliudehuanghun
2009-11-25
打赏
举报
回复
维护下就知道其中的苦处了。现在这个模块才8张表,最多的级联了4层,下周这个模块要扩展
又要加4张表,哎
加载更多回复(14)
用JDBC实现
数据库
的
级联删除
与更新
有学院
表
(id,name)、学生
表
(id,schid,stuname)。当删除学院时,该学院下的学生自动删除。当更新学院时,学生
表
自动更新。
解析Oracle中多
表
级联删除
的方法
方法一:创建约束时设定
级联删除
(但一般由于各种原因或出于各种考虑在创建
数据库
时没有设定
级联删除
)SQL语句: 代码如下:CREATE TABLE “U_WEN_BOOK”.”FARTAB” (“FAR_ID” NUMBER(10) NOT NULL,“FAR_NAME” ...
OpenCV级联分类器训练与使用实战教程
基于OpenCV新版本3.1.0详细讲述了HAAR与LBP级联分类器的基本原理与使用技巧,通过视频中人脸实时检测与眼睛跟踪例子演示了级联分类器在项目中的运用。通过OpenCV自带的训练工具实现样本数据训练生成自己的级联分类器...
Oracle
数据库
中的级联查询、
级联删除
、级联更新操作教程
里整理了Oracle中的三种级联操作,其中Oracle定义外健的时候可以定义
级联删除
,但是没有级联修改的语法,当然可以用触发器实现,下面我们详细来看Oracle
数据库
中的级联查询、
级联删除
、级联更新操作教程
MySQL中利用外键实现
级联删除
、更新
在
数据库
MySQL中利用外键实现
级联删除
、更新等方面的内容。有兴趣可以看看。。
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章