DML触发器

DML触发器就是普通的  INSERT / UPDATE / DELETE 触发器。 DDL触发器就是一些特有的 DDL 语句的触发器。 例如:登陆到服务器的触发, 创建数据库的触发。  DML 触发器是当数据库服务器中发生数据操作语言 (DML) 事件时要执行的操作。DML 事件包括对表或视图发出的 UPDATE、INSERT 或 DELETE 语句。DML 触发器用于在数据被修改时强制执行业务规则,以及扩展 Microsoft SQL Server 约束、默认值和规则的完整性检查逻辑。  MicrosoftSQL Server 提供两种主要机制来强制使用业务规则和数据完整性:约束和触发器。触发器为特殊类型的存储过程,可在执行语言事件时自动生效。SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。  当服务器或数据库中发生数据定义语言 (DDL) 事件时将调用 DDL 触发器。有关详细说明,请参阅 DDL 触发器。登录触发器将为响应 LOGON 事件而激发存储过程。与 SQL Server 实例建立用户会话时将引发此事件。有关详细信息,请参阅登录触发器。 当数据库中发生数据操作语言 (DML) 事件时将调用 DML 触发器。DML 事件包括在指定表或视图中修改数据的 INSERT 语句、UPDATE 语句或 DELETE 语句。DML 触发器可以查询其他表,还可以包含复杂的 Transact-SQL 语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到错误(例如,磁盘空间不足),则整个事务即自动回滚。 DML 触发器在以下方面非常有用:  DML 触发器可通过数据库中的相关表实现级联更改。不过,通过级联引用完整性约束可以更有效地进行这些更改。  DML 触发器可以防止恶意或错误的 INSERT、UPDATE 以及 DELETE 操作,并强制执行比 CHECK 约束定义的限制更为复杂的其他限制。  与 CHECK 约束不同,DML 触发器可以引用其他表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其他操作,如修改数据或显示用户定义错误信息。  DML 触发器可以评估数据修改前后表的状态,并根据该差异采取措施。  一个表中的多个同类 DML 触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的操作来响应同一个修改语句。  DDL触发器  DDL 触发器是一种特殊的触发器,它在响应数据定义语言 (DDL) 语句时触发。它们可以用于在数据库中执行管理任务,例如,审核以及规范数据库操作。  像常规触发器一样,DDL 触发器将激发存储过程以响应事件。但与 DML 触发器不同的是,它们不会为响应针对表或视图的 UPDATE、INSERT 或 DELETE 语句而激发。相反,它们将为了响应各种数据定义语言 (DDL) 事件而激发。这些事件主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应。执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。 重要提示:  测试您的 DDL 触发器以确定它们是否响应运行的系统存储过程。例如,CREATE TYPE 语句和 sp_addtype 存储过程都将激发针对 CREATE_TYPE 事件创建的 DDL 触发器。. DDL 触发器可用于管理任务,例如审核和控制数据库操作。 如果要执行以下操作,请使用 DDL 触发器:

要防止对数据库架构进行某些更改。  希望数据库中发生某种情况以响应数据库架构中的更改。 要记录数据库架构中的更改或事件。  仅在运行触发 DDL 触发器的 DDL 语句后,DDL 触发器才会激发。DDL 触发器无法作为 INSTEAD OF 触发器使用。  下面的示例显示如何使用 DDL 触发器阻止修改或删除数据库中的任何表。 CREATE TRIGGER safety  ON DATABASE   FOR DROP_TABLE, ALTER_TABLE  AS      PRINT You must disable Trigger "safety" to drop or alter tables!    ROLLBACK   可以激发 DDL 触发器以响应在当前数据库或当前服务器中处理的 Transact-SQL 事件。触发器的作用域取决于事件。有关 DDL 触发器作用域的详细信息,请参阅设计 DDL 触发器。 若要获取 AdventureWorks2008R2 示例数据库中提供的 DDL 触发器示例,请在 SQL Server Management Studio 的对象资源管理器中打开位于 AdventureWorks2008R2 数据库的“可编程性”文件夹中的 Database Triggers 文件夹。右键单击 ddlDatabaseTriggerLog 并选择“编写数据库触发器脚本为”。默认情况下,DDL 触发器 ddlDatabaseTriggerLog 处于禁用状态

DDL触发器和DML触发器的用处不同

DML 触发器在 INSERT、UPDATE 和 DELETE 语句上操作,并且有助于在表或视图中修改数据时强制业务规则,扩展数据完整性。  DDL 触发器对 CREATE、ALTER、DROP 和其他 DDL 语句以及执行 DDL 式操作的存储过程执行操作。它们用于执行管理任务,并强制影响数据库的业务规则。它们应用于数据库或服务器中某一类型的所有命令。可以使用相似的 Transact-SQL 语法创建、修改和删除 DML 触发器和 DDL 触发器,它们还具有其他相似的行为。  与 DML 触发器相同,DDL 触发器可以运行在 Microsoft.NET Framework 中创建的以及在 SQL Server 中上载的程序集中打包的托管代码。与DML 触发器相同,可以为同一个 Transact-SQL 语句创建多个 DDL 触发器。同时,DDL 触发器和激发它的语句运行在相同的事务中。可从触发器中回滚此事务。严重错误可能会导致整个事务自动回滚。从批处理中运行并显式包含ROLLBACK TRANSACTION 语句的DDL触发器将取消整个批处理。  注意  不能回滚发生在 DDL 触发器正文内的 ALTER DATABASE 事件。  与 DML 触发器相同,可以嵌套 DDL 触发器。设计 DDL 触发器时,请从下列几个方面考虑它们与 DML 触发器的不同:  只有在完成 Transact-SQL 语句后才运行 DDL 触发器。DDL 触发器无法作为 INSTEAD OF 触发器使用。  DDL 触发器不会创建插入的和删除的表。可以使用 EVENTDATA 函数捕获有关激发 DDL 触发器的事件以及触发器导致的后续更改的信息。

转载于:https://www.cnblogs.com/ziqiumeng/p/7588293.html

DDL触发器与DML触发器比较相关推荐

  1. 杂谈--DML触发器学习

    触发器按类型分为三类: 1. DML 触发器,在数据变更时触发: 2. DDL 触发器,在修改数据库级别或实例级别对象时触发: 3. Login 触发器,在用户登录时触发: 最常见的是DML触发器,D ...

  2. mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...

    11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了--作为一名美创的员工,客户才是第一位,我毫不犹豫的摁下了接听键. ​ X ...

  3. sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器

    各位新朋友-记得先点蓝字关注我哦- 11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了--作为一名美创的员工,客户才是第一位 ...

  4. PL/SQL -- DML 触发器

    --======================= -- PL/SQL --> DML 触发器 --======================= 何谓触发器?简言之,是一段命名的PL/SQL代 ...

  5. Oracle入门(十四.20)之创建DML触发器:第一部分

    一.什么是DML触发器? DML触发器是执行SQL DML语句(INSERT,UPDATE或DELETE)时自动触发(执行)的触发器. 您可以通过两种方法对DML触发器进行分类: •执行时间:BEFO ...

  6. oracle dml触发器 获取当前执行sql语句,Oracle DML触发器

    DML触发器的要点 DML触发器是定义在表上的触发器,由DML事件引发.编写DML触发器的要素是: * 确定触发的表,即在其上定义触发器的表. * 确定触发的事件,DML触发器的触发事件有INSERT ...

  7. oracle 停止触发器语句,oracle触发器语句

    ORACLE中触发器的判断IF语句 加一行 NULL 即可例如:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF ...

  8. Oracle 原理:DML触发器和数据库触发器

    一.DML触发器 触发器的作用即当某个事件发生时会自动执行执行程序段里的内容. 触发器可以作用于表或者视图,可以指定在insert 或update 或delete  操作前.操作时.操作后 执行特定的 ...

  9. Oracle入门(十四.22)之创建DDL和数据库事件触发器

    一.什么是DDL和数据库事件触发器? DDL语句触发DDL触发器:CREATE,ALTER或DROP. 数据库事件触发器由数据库中的非SQL事件触发,例如: •用户连接到数据库或与数据库断开连接. • ...

最新文章

  1. ie关闭浏览器tab提示信息
  2. LeetCode Multiply Strings(大整数相乘)
  3. VC6.0下MFC按钮点击函数手动添加
  4. 基于Boost::beast模块的协程WebSocket客户端
  5. PG奥斯卡!云数据库专属集群MyBase荣获2020 PG亚洲大会“年度最佳产品奖”
  6. PHP: 深入了解一致性哈希
  7. r vector 4 elements_Vector类与Enumeration接口
  8. nginx php value,Nginx 设置 PHP_VALUE 的灵异问题
  9. python能做底层开发吗_python底层是什么语言
  10. package.json配置简介
  11. 微信接口类php,【微信接口库】分享10个常用的php微信接口类
  12. 实现折叠的uitableviewcell效果
  13. dubbo消费者调用报错Unsupported protocol rest in notified url
  14. linux 环境下安装dubbo管理控制台 dubbo admin
  15. Windows2008R2操作系统日志清理
  16. 目标检测:YOLO V1、YOLO V2、YOLO V3 算法
  17. 大数据这么火,什么是大数据呢?-大萝卜博客网
  18. Unity3D粒子系统之制作火焰特效
  19. Labelme标注的json数据转化为coco格式的数据
  20. 工具篇:金蝶K3WISE-反过账工具下载

热门文章

  1. iOS 10 推送的简单使用
  2. hdu-5645 DZY Loves Balls(水题)
  3. 初识NodeJS,一个基于GoogleV8引擎的Javascript运行环境
  4. Linux之mkdir命令
  5. linux之iftop命令
  6. JVM垃圾回收算法标记清除和复制算法
  7. 设计模式7大结构型模式
  8. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [四] JSON数据解析
  9. poj1068Parencodings
  10. C#窗体控件-列表框控件ListBox