update表时,会执行表上的delete触发器,然后再执行insert触发器?对吗?

heavyrain1234 2016-01-20 09:51:52
不知在哪听说过,update表时,会执行表上的delete触发器,然后再执行insert触发器,
假设表已经建立好了insert \delete \update触发器,
不知理解我正确否?
...全文
403 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
heavyrain1234 2016-02-15
  • 打赏
  • 举报
回复
1、首先谢谢各位,我明白for update只针对表update操作时触发。
顾西昂 2016-01-27
  • 打赏
  • 举报
回复
你for什么 或者after 什么就是什么触发器
xiaoxiangqing 2016-01-27
  • 打赏
  • 举报
回复
不会的,update只会执行update触发器
中国风 2016-01-27
  • 打赏
  • 举报
回复
在另一贴有回复同一内容:这里Copy


覆盖更新:
1、堆
2、有聚集索引,更新列非聚集索引
3、更新聚集索引--没有改变表的定位符

这里举个例子,查看日志的方法

CREATE TABLE TabName2(ID INT PRIMARY KEY,Num INT )
INSERT INTO TabName2 SELECT 1,10
INSERT INTO TabName2 SELECT 2,20

UPDATE TabName2 SET ID=3-ID
--查看日志
SELECT * FROM::fn_dblog (null, null) WHERE Operation in('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW') AND AllocUnitName LIKE '%TabName2%'


/*
0000006f:00000270:0002 LOP_MODIFY_ROW LCX_CLUSTERED
0000006f:00000270:0003 LOP_MODIFY_ROW LCX_CLUSTERED
*/


原贴
马少华 2016-01-26
  • 打赏
  • 举报
回复
引用 2 楼 roy_88 的回复:
更新分两类 1:覆盖更新---直接更新,记录在同一页相同位置,直接更新 2:非覆盖更新--删除再新增
求科谱,什么样的更新是覆盖更新,什么样的更新非覆盖更新。
Ginnnnnnnn 2016-01-21
  • 打赏
  • 举报
回复
update 触发器仅当你定义了update触发器并且 执行update 操作才会触发。 楼主说的应该是update 的内部机制而已,跟触发器没什么关系
顾西昂 2016-01-21
  • 打赏
  • 举报
回复
update讲道理当然只会对update触发器有影响
中国风 2016-01-20
  • 打赏
  • 举报
回复
同楼主理解完全两回事,你把内部机制管理同触发器搞混了,触发器只会 对 update有影响 比如:
Create trigger tr_cT on T
after update --指定了动作为UPDATE,如果没有不会触发
中国风 2016-01-20
  • 打赏
  • 举报
回复
更新分两类 1:覆盖更新---直接更新,记录在同一页相同位置,直接更新 2:非覆盖更新--删除再新增
专注or全面 2016-01-20
  • 打赏
  • 举报
回复
update非主键的时候,仅仅是执行一个更新的操作 update 主键的时候,是先删除再插入

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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