查看: 23509|回复: 66

关于TRIGGER的取舍(newkid进)

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2008-9-10 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于TRIGGER的取舍,见newkid在版里发表过多次意见:尽量不要用TRIGGER,用PROCEDURE代替TRIGGER
虽然很佩服newkid的专业水平,也对他的话深信不疑,不过还是不知道为什么
newkid同学能不能解释一下啊

还有,一些功能,在FORM上实现的,用PROCEDURE代替TRIGGER写起来有些困难,
不知道该如何解决
论坛徽章:
187
状元
日期:2016-04-28 14:18:17榜眼
日期:2016-04-28 14:18:17探花
日期:2016-04-28 14:18:17进士
日期:2016-04-28 14:18:17举人
日期:2016-04-28 14:18:17红宝石
日期:2012-04-13 17:18:06蓝锆石
日期:2012-02-20 12:20:11紫水晶
日期:2012-04-19 12:49:17祖母绿
日期:2012-02-27 22:10:14海蓝宝石
日期:2012-02-27 16:58:24
2#
发表于 2008-9-10 16:27 | 只看该作者
什么TRIGGER? 数据库TRIGGER的,还是FORM上的?

使用道具 举报

回复
论坛徽章:
0
3#
 楼主| 发表于 2008-9-10 16:31 | 只看该作者
原帖由 smallnavy 于 2008-9-10 16:27 发表
什么TRIGGER? 数据库TRIGGER的,还是FORM上的?

数据库的,我想newkid同学所指的也应该是的数据库级的TRIGGER

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
4#
发表于 2008-9-10 22:45 | 只看该作者
哎,整得我像万峰老师似的……我确实说过类似的话,就再罗嗦一次好了:
我说的触发器是表上的,FORM上的触发器是另一种东西,该用就用。
每个触发器都是一个隐藏的存储过程。隐藏的代码对开发者很不友好。如果你正在看一段别人的程序,总觉得少了点什么,折腾半天原来还有些动作隐藏在触发器里!顺藤摸瓜去找了触发器,发现里面对其他表有DML,又有其他隐藏代码,是不是头很大?这种连锁触发增加了复杂性,很容易失控。起初我也做过这种东西,觉得系统布满了精巧的机关,很有成就感,后来才发现这对维护来说简直就是噩梦加陷阱。
因为触发器是隐藏的,它不执行你也不知道。假如有个触发器编译失效,DML还是不声不响的照样成功了!存储过程就不会这样。
触发器没有办法绕过。假如你有个产品正在跑,这时候需要补几条故障时间的历史数据,INSERT上的触发器有些动作是你不想要的,这就难办了。
触发器还有MUTATING TABLE问题。很多人一看这问题就上自治事务,殊不知这是个馊主意。自治事务使得你看到的数据都是旧的,因为主事务所作的修改还未提交。多行的DML会多次触发,产生一大堆小事务,很容易发生死锁。
在批量操作、多次触发到情况下,触发器的效率低,因为它相当于每次都执行一段PL/SQL. 往往可以把它转化为等价的几个SQL,效率提高很多。
暂时说这么多吧,大家想到再补充,也欢迎辩论。

使用道具 举报

回复
论坛徽章:
27
设计板块每日发贴之星
日期:2007-08-24 01:05:17奥运会纪念徽章:拳击
日期:2012-06-25 14:17:112012新春纪念徽章
日期:2012-01-04 11:49:54生肖徽章2007版:龙
日期:2009-04-07 18:18:35生肖徽章2007版:鸡
日期:2008-10-14 14:14:30生肖徽章2007版:龙
日期:2008-10-08 21:22:20铁扇公主
日期:2008-09-28 11:20:58授权会员
日期:2008-09-05 13:30:44ITPUB元老
日期:2008-09-05 13:30:31奥运会纪念徽章:摔跤
日期:2008-07-26 08:05:05
5#
发表于 2008-9-11 08:04 | 只看该作者
原帖由 zhangfengh 于 2008-9-10 16:29 发表
搬个凳子,继续等着newkid讲课

使用道具 举报

回复
论坛徽章:
3
2009新春纪念徽章
日期:2009-01-04 14:52:28ITPUB9周年纪念徽章
日期:2010-10-08 09:28:51蜘蛛蛋
日期:2011-09-13 10:35:40
6#
发表于 2008-9-11 08:33 | 只看该作者
原帖由 newkid 于 2008-9-10 22:45 发表

因为触发器是隐藏的,它不执行你也不知道。假如有个触发器编译失效,DML还是不声不响的照样成功了!存储过程就不会这样。
触发器没有办法绕过。假如你有个产品正在跑,这时候需要补几条故障时间的历史数据,INSERT上的触发器有些动作是你不想要的,这就难办了。
触发器还有MUTATING TABLE问题。很多人一看这问题就上自治事务,殊不知这是个馊主意。自治事务使得你看到的数据都是旧的,因为主事务所作的修改还未提交。多行的DML会多次触发,产生一大堆小事务,很容易发生死锁。
在批量操作、多次触发到情况下,触发器的效率低,因为它相当于每次都执行一段PL/SQL. 往往可以把它转化为等价的几个SQL,效率提高很多。

学习了。
补充一句:像after update 的trigger是不能操作基表。

使用道具 举报

回复
论坛徽章:
66
皇马
日期:2009-02-13 09:38:532011新春纪念徽章
日期:2011-02-18 11:43:342010广州亚运会纪念徽章:柔道
日期:2011-04-08 23:11:212010广州亚运会纪念徽章:排球
日期:2011-04-18 22:00:58鲜花蛋
日期:2011-05-30 21:23:49ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:15迷宫蛋
日期:2012-12-18 23:39:42问答徽章
日期:2013-09-25 16:14:23优秀写手
日期:2015-02-12 06:00:13
7#
发表于 2008-9-11 08:43 | 只看该作者
嗯   学习了  说的确实是有道理

使用道具 举报

回复
论坛徽章:
33
劳斯莱斯
日期:2013-08-08 14:01:23三菱
日期:2013-09-28 10:16:06一汽
日期:2013-11-19 17:01:11凯迪拉克
日期:2013-12-07 17:11:282014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02itpub13周年纪念徽章
日期:2014-09-27 14:20:21itpub13周年纪念徽章
日期:2014-10-08 15:13:38懒羊羊
日期:2015-03-04 14:52:112015年新春福章
日期:2015-03-06 11:58:18
8#
发表于 2008-9-11 09:14 | 只看该作者
原帖由 zhangfengh 于 2008-9-10 16:29 发表
搬个凳子,等着newkid讲课

有必要吸收为版主,为开发版储备人才.
强力推荐

使用道具 举报

回复
论坛徽章:
5
奥运会纪念徽章:羽毛球
日期:2008-10-24 13:06:542010广州亚运会纪念徽章:马术
日期:2010-11-29 10:30:59ERP板块每日发贴之星
日期:2010-12-04 01:01:01ITPUB 11周年纪念徽章
日期:2012-10-10 13:11:142013年新春福章
日期:2013-02-25 14:51:24
9#
发表于 2008-9-11 09:23 | 只看该作者
收获了...呵呵。。。
下次请他来个在线视频讲课!

使用道具 举报

回复
论坛徽章:
3
奥运会纪念徽章:铁人三项
日期:2008-08-14 11:45:20生肖徽章2007版:马
日期:2009-03-20 11:26:202010新春纪念徽章
日期:2010-03-01 11:19:07
10#
发表于 2008-9-11 09:47 | 只看该作者
受教了

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表