DDL触发器与DML触发器比较
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触发器比较相关推荐
- 杂谈--DML触发器学习
触发器按类型分为三类: 1. DML 触发器,在数据变更时触发: 2. DDL 触发器,在修改数据库级别或实例级别对象时触发: 3. Login 触发器,在用户登录时触发: 最常见的是DML触发器,D ...
- mysql 触发器不能同时 insert or update or delete_运维日记|SQL server 那点事——DML触发器...
11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了--作为一名美创的员工,客户才是第一位,我毫不犹豫的摁下了接听键. X ...
- sqlserver 触发器 update_运维日记| SQL server 那点事——DML触发器
各位新朋友-记得先点蓝字关注我哦- 11月19日,21点,小编正六指霸屏,决赛圈1V4,忽然,电话响了,这种感觉很熟悉,不错,上次差点推掉对面水晶的那一幕又上演了--作为一名美创的员工,客户才是第一位 ...
- PL/SQL -- DML 触发器
--======================= -- PL/SQL --> DML 触发器 --======================= 何谓触发器?简言之,是一段命名的PL/SQL代 ...
- Oracle入门(十四.20)之创建DML触发器:第一部分
一.什么是DML触发器? DML触发器是执行SQL DML语句(INSERT,UPDATE或DELETE)时自动触发(执行)的触发器. 您可以通过两种方法对DML触发器进行分类: •执行时间:BEFO ...
- oracle dml触发器 获取当前执行sql语句,Oracle DML触发器
DML触发器的要点 DML触发器是定义在表上的触发器,由DML事件引发.编写DML触发器的要素是: * 确定触发的表,即在其上定义触发器的表. * 确定触发的事件,DML触发器的触发事件有INSERT ...
- oracle 停止触发器语句,oracle触发器语句
ORACLE中触发器的判断IF语句 加一行 NULL 即可例如:SQL> DECLARE 2 testvalue INT; 3 BEGIN 4 testvalue := 200; 5 6 IF ...
- Oracle 原理:DML触发器和数据库触发器
一.DML触发器 触发器的作用即当某个事件发生时会自动执行执行程序段里的内容. 触发器可以作用于表或者视图,可以指定在insert 或update 或delete 操作前.操作时.操作后 执行特定的 ...
- Oracle入门(十四.22)之创建DDL和数据库事件触发器
一.什么是DDL和数据库事件触发器? DDL语句触发DDL触发器:CREATE,ALTER或DROP. 数据库事件触发器由数据库中的非SQL事件触发,例如: •用户连接到数据库或与数据库断开连接. • ...
最新文章
- ie关闭浏览器tab提示信息
- LeetCode Multiply Strings(大整数相乘)
- VC6.0下MFC按钮点击函数手动添加
- 基于Boost::beast模块的协程WebSocket客户端
- PG奥斯卡!云数据库专属集群MyBase荣获2020 PG亚洲大会“年度最佳产品奖”
- PHP: 深入了解一致性哈希
- r vector 4 elements_Vector类与Enumeration接口
- nginx php value,Nginx 设置 PHP_VALUE 的灵异问题
- python能做底层开发吗_python底层是什么语言
- package.json配置简介
- 微信接口类php,【微信接口库】分享10个常用的php微信接口类
- 实现折叠的uitableviewcell效果
- dubbo消费者调用报错Unsupported protocol rest in notified url
- linux 环境下安装dubbo管理控制台 dubbo admin
- Windows2008R2操作系统日志清理
- 目标检测:YOLO V1、YOLO V2、YOLO V3 算法
- 大数据这么火,什么是大数据呢?-大萝卜博客网
- Unity3D粒子系统之制作火焰特效
- Labelme标注的json数据转化为coco格式的数据
- 工具篇:金蝶K3WISE-反过账工具下载