触发器后触发问题?

newmankind 2007-05-11 02:42:45
after触发器,为什么当触发器插入数据出错,(故意设置触发器语法插入另外表时不正确)却把所有之前的insert到表的数据也搞没了,不是后触发么,就算回滚,滚人家干嘛,死活想不明白!
...全文
352 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
newmankind 2007-05-15
  • 打赏
  • 举报
回复
to wgsasd311(自强不息)
如果after触发器按照下面定义,我就理解,但是目前的定义真是让人费解

指定触发器只有在触发 SQL 语句中指定的所有操作都已执行但未提交时才激发。所有的引用级联操作和约束检查也必须已执行但未提交,才能执行此触发器。

(原定义)
指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。

如果仅指定 FOR 关键字,则 AFTER 是默认设置。
newmankind 2007-05-15
  • 打赏
  • 举报
回复
to gahade(与君共勉)
1、我完全理解你对一致性的解释,也完全理解对于Insead of 触发器跟insert语句是一个统一的整体事务.
2、我遇到的难题是,想找出一个不一致的东东,就是后面的触发操作对前面已完成的操作没有任何影响,我不要一致性,不一致才好呢,呵呵.(这就是我前面的说得发邮件的例子,比如插入成功了,我发邮件,如果我发不出邮件也不会影响之前的插入).
3、我之所以想不通不是你所说的触发器整体事务,而是细化分类的instead of触发器和after触发器的差别:
instead of 是前触发,就是在执行sql语句前就把执行触发器。所以触发器不成功,后面的sql语句也执行不了,而且触发器成功的部分也回滚,一点问题也没有
after是后触发,既然是后触发,就应该有明显的与前触发的区别,可是站在用户角度,前触发后触发的结果是完全一样的,只要你触发器出错,我的数据就是插不进去。那还煞有介事的分什么instead of和after和for三种干什么,就设立一种触发器得了
gahade 2007-05-11
  • 打赏
  • 举报
回复
举个删除触发器的例子

常见的主从表结构,一般是在主表有删除触发器,作用是级联删除从表对应的资料.但如果在删除从表的时候出错的话那主表的数据也要回滚的,不然肯定数据会不一致.
wgsasd311 2007-05-11
  • 打赏
  • 举报
回复
AFTER

指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。

如果仅指定 FOR 关键字,则 AFTER 是默认设置。

不能在视图上定义 AFTER 触发器。
gahade 2007-05-11
  • 打赏
  • 举报
回复
insert语句和insert触发器是一个整体的事务~!
楼主理解了事务,为什么不理解触发器呢?

如果是数据逻辑导致的错误是和触发器本身没有关系的.
y_dong119 2007-05-11
  • 打赏
  • 举报
回复
jf
newmankind 2007-05-11
  • 打赏
  • 举报
回复
为什么非要像现在这样呢?签合同就是俩一块签,插入完,活干完了,系统告诉它,你丫坐等着,看后面的干活。它干不好,你俩谁也甭想好,一块滚蛋。
这根直接触发器接管又有多大区别呢?反正早插晚插一样等,即使早插了,也灭好处,因为触发器干坏了,还得从头。索性不如触发器你忙吧,看它干完再继续插入动作。岂不皆大欢喜。
newmankind 2007-05-11
  • 打赏
  • 举报
回复
那么当向表insert时,再向另一表插入数据的功能如何实现?
楼主不觉得你的想法矛盾了吗?

兄台,我还是不明白这句是什么意思?

只是一个单向流程,A数据插入后,成功了,有个返回告诉系统,系统会通知触发器,你干活吧,那边人家已经结帐了,然后触发器就干活。这样应该没有问题滴啊,脑子蒙蒙的
gahade 2007-05-11
  • 打赏
  • 举报
回复
理解问题.
insert语句和insert触发器为一个整体.
insert后触发insert触发器,insert触发器影响insert结果.

按楼主的理解就是insert语句可以触发触发器,但触发器不影响insert语句
就是A到B,但B不能到A,
那么当向表insert时,再向另一表插入数据的功能如何实现?
楼主不觉得你的想法矛盾了吗?
newmankind 2007-05-11
  • 打赏
  • 举报
回复
如果insert 数据到表A,我在触发器里把插入数据 插入到表B,恰恰表B根A没有一致性的关联,顶多是以日志的方式记录,成不成功都问题不大。但是现在就找不出一种触发器让A成功插入后,B插入失败却不影响到A表已插入的数据,是业务的要求,本来用sp控制会好很多,可是啊,被挤到这了,费用这倒霉的触发器。
newmankind 2007-05-11
  • 打赏
  • 举报
回复
对事务概念还算比较理解,关键是after触发器的现象不是 仅仅触发器在一个事务里,是它把insert动作也给包含到这个事务里了,这点难以接受。
gahade 2007-05-11
  • 打赏
  • 举报
回复
SQL只认xp_sendmail的返回值是否成功,如果发送成功后,邮件邮件服务器崩溃了或停电了,SQL不会知道也不会回滚.
Yang_ 2007-05-11
  • 打赏
  • 举报
回复
1楼已经解释清楚了

是不是楼主对事务的概念尚不理解??
newmankind 2007-05-11
  • 打赏
  • 举报
回复
to gahade(与君共勉)
如果是表约束我能理解,它的地位就相当于instead of触发器,要想一致,你通过我,无论哪一段出问题,都得有连带责任,一损俱损一荣俱荣。
你写的那段代码也是实际上after触发器运行的原理
begin tran
insert into 表
select '11'
触发器代码...

成功后commit tran
挫败rollback tran
但是我就不明白了,触发器若不是为了保证一致性的需求,比如我入库后就发一个邮件提醒给管理员,你总不能因为邮件发不成功不让我入库,入库的紧急程度总比发一封提醒邮件的紧急程度高很多啊,而且我也一直理解after触发器是为了满足这种需求而生的。
如果实在不能满足,兄台有好的解决办法么?现在我头疼死了。
gahade 2007-05-11
  • 打赏
  • 举报
回复
这就像如果insert时违反了主键或约束时,数据也同样会同滚的道理一样.
如果表没有任务约束或触发器,插入成功就成功了,但如果有的话它们就是一个整体事务,就像这样
begin tran
insert into 表
select '11'
触发器代码...

成功后commit tran
挫败rollback tran.

做为一个整体的事务是很有必要的,比如现在是在入库表上有触发器,触发器的代码是入库后库存增加,如果当更新库存时出错的话,入库的记录也保存到了,那何来的一致性呢?
srgcc 2007-05-11
  • 打赏
  • 举报
回复
说的好,就是不通人情啊,^_^
newmankind 2007-05-11
  • 打赏
  • 举报
回复
对于instead of触发,我能理解。但是对于after我实在想不明白,不是说是insert成功之后才触发么,应该是两个独立的事务的,你成功,我干活,我干不成,我自己负责。况且也有很多这样的业务需求,为什么非要滚人家,自己干不好,非把人家干好的也拉下水。
gahade 2007-05-11
  • 打赏
  • 举报
回复
楼主理解一下"触发器整体是一个事务"
渭河流域位于中国黄河中游地区,是黄河的重要一级支流流域,地理范围主要涵盖陕西省中部、甘肃东部和宁夏部分地区。该流域自西向东延伸,总长约818公里,流域面积广阔,人口密集,是我国重要的农业与工业带,同时也是西北地区经济、文化与生态发展的核心区域之一。渭河流域水系发育完善,除干流外,还包括泾河、洛河、沣河、滈河等多条支流,构成了完整的河网体系,对黄河流域的水资源调配与生态安全具有重要意义。 本数据集提供了渭河流域矢量边界及河流分布的标准化shp文件,包含以下文件: (1)可编辑MXD文件:可直接在 ArcGIS 中打开,用户可进行二次编辑、专题制图及空间分析,方便科研、教学与管理应用。 (2)标准SHP文件:包含渭河流域边界矢量数据以及干流与主要支流的矢量化河流线条,属性表中附带河流名称、流域隶属等信息,便于查询与叠加分析。 (3)标准成图TIF文件:输出高清、规范的地图成果,能够直观展示渭河流域整体边界与内部河流分布格局,可用于汇报、展示与出版。 本资源可广泛应用于流域水资源管理、生态环境保护、土地利用研究、洪涝灾害评估等领域,同时也能为流域综合治理、生态修复规划、水文模拟与地理建模提供基础支撑。通过与其他数据(如DEM、土地覆盖、气象数据)叠加使用,还能开展更加深入的多源数据分析,为黄河流域高质量发展与区域生态安全提供科学依据。
一、商户信息管理模块 商户入驻与审核 商户在线提交入驻申请,上传营业执照、经营许可证、卫生许可证(餐饮类)等资质文件,填写基本信息(商户名称、经营范围、地址、联系方式、营业时间等)。 景区管理员对申请进行审核,通过后生成唯一商户编号,商户可登录系统完善详情(店铺简介、环境照片、特色产品等)。 商户分类与标签管理 按经营类型分类:餐饮住宿(民宿、餐馆)、旅游商品(手工艺品、特产店)、体验项目(骑马、漂流)、便民服务(超市、药店)等。 为商户添加特色标签(如 “清真餐饮”“亲子友好”“网红打卡地”),便于游客精准筛选。 商户信息维护 商户可更新店铺状态(营业 / 暂停 / 歇业)、修改营业时间、发布临时公告(如 “今日特价活动”)。 管理员可查看商户运营数据,对违规商户进行警告、限期整改或暂停合作处理。 二、商户运营监管模块 商品与服务管理 商户上传商品 / 服务信息(名称、价格、规格、图片),餐饮类需标注食材来源、口味特色;体验类需注明安全须知、时长。 支持价格调整记录,系统自动留存价格变动日志,便于监管部门核查是否存在乱收费现象。 游客消费与投诉处理 对接支付系统,记录游客在商户的消费数据(匿名化处理,仅统计交易金额、频次)。 游客可通过系统提交对商户的投诉(服务态度、商品质量、价格问题等),上传凭证(照片、聊天记录),系统自动通知商户限期回应,管理员跟踪处理结果。 评分与信用管理 游客消费后可对商户进行星级评分(1-5 星)及文字评价,评价内容需经管理员审核后展示。 系统根据评分、投诉处理率、违规记录生成商户信用等级,信用过低的商户将被限制曝光或强制整改。 三、景区资源与活动管理 商户资源调度 针对景区内共享资源(如摊位、停车场、公共休息区),商户可在线申请使用时段,管理员审核分配,避免资源冲突。 记录资源使用情况,按规定收取管理费,生成缴费提醒与票据。

34,871

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧