关于MSDN《了解 DML 触发器》

  rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">

这是SQLServer基础知识方面的一片文章,msdn中有关触发器的介绍文章
<<
了解 DML 触发器>>
http://msdn.microsoft.com/zh-cn/library/ms178110.aspx

其中有一段描述

DML 触发器在以下方面非常有用:

  • DML 触发器可通过数据库中的相关表实现级联更改。不过,通过级联引用完整性约束可以更有效地进行这些更改。
  • DML 触发器可以防止恶意或错误的 INSERTUPDATE 以及 DELETE 操作,并强制执行比 CHECK 约束定义的限制更为复杂的其他限制。
    CHECK 约束不同,DML 触发器可以引用其他表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其他操作,如修改数据或显示用户定义错误信息。
  • DML 触发器可以评估数据修改前后表的状态,并根据该差异采取措施。
  • 一个表中的多个同类 DML 触发器(INSERTUPDATE DELETE)允许采取多个不同的操作来响应同一个修改语句。

于初学者往往会滥用触发器导致数据库管理混乱,触发器是把双刃剑,慎用.从上面的描述可以看出来,ms还是倾向于在用普通约束或其他sql本身无法解决的 时候才推荐使用触发器.我个人认为在类似他列举的13这两条,在具备条件的情况下应该也少用触发器,而是在程序中通过事务控制实现.

这里也不再讨论滥用的这个问题,而是对以上ms推荐的四种场景来举例讨论具体应用情况.

1.
第一个场景主要是说明某表数据变动,其他依赖表项能同步反映.下面测试语句可以直接运行.



/******************************************

DML 触发器可通过数据库中的相关表实现级联更改

*******************************************/

--测试用例:同步张同构表

--创建测试表

create table a(id int ,name varchar(10))

create table b(id int ,name varchar(10))

go

--建立触发器

create trigger trg_test

on a

for insert,update,delete

as

begin

    if exists (select 1 from deleted)

       delete from b where id in(select id

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值