4.DDL触发器就是INSTEAD OF触发器

合集下载

测验答案-第15章触发器的创建与管理

测验答案-第15章触发器的创建与管理

测验填空题(1) 按激活事件类型的不同,可以把SQL Server 2005系统提供的触发器分为两大类,即和。

答案:DML触发器,DDL触发器(2) 可以使用系统存储来指定要对表执行的第一个AFTER触发器。

答案:sp_settriggerorder选择题(1) 关于AFTER和INSTEAD OF触发器叙述中错误的是哪一个。

A. 既可以在表上也可以在视图上定义AFTER触发器。

B. 既可以在表上也可以在视图上定义INSTEAD OF触发器。

C. 可以为一个激活事件定义多个AFTER触发器。

D. 只能为一个激活事件定义一个INSTEAD OF触发器。

答案:A(2) 如果表上有一个针对UPDATE操作的触发器,当对该表执行UPDATE操作时关于inserted和deleted表的说法中正确的是哪一个。

A. inserted和deleted表中都没有记录。

B. inserted和deleted表中都有记录。

C. inserted表中有记录,deleted表中没有记录。

D. inserted表中没有记录,deleted表中有记录。

答案:B(3) 如果希望将通过视图删除记录的操作转换成直接删除基本表中记录的操作,可以通过在视图上创建哪种类型的触发器来实现。

A. ALTER DELETEB. INSTEAD OF DELETEC. BEFORE DELETED. CHANGE DELETE答案:B(4) 在触发器的定义中,可以使用下列哪个命令。

A. CREATE INDEXB. RESTORE DATABASEC. INSERT INTOD. ALTER DA TABASE答案:C判断题(1) 如果针对一个激活事件定义了多个触发器,可以为这些触发器指定执行先后顺序。

答案:×(2) inserted和deleted表中的数据只能读,不能写入。

答案:√(3) 可以以CLR的方式编写SQL Server 2005的触发器。

SQLSERVER2024使用INSTEADOF触发器

SQLSERVER2024使用INSTEADOF触发器

SQLSERVER2024使用INSTEADOF触发器INSTEAD OF触发器是一种特殊的触发器,它可在SQL Server中首次
引入,它主要用来替换 DML 语句,取代了 SQL Server 以前的 DML 触发器,例如AFTER 或 BEFORE 形式的触发器。

INSTEAD OF触发器最初出现在SQL Server 2000 中,用于替换标准
的触发器,如 BEFORE 或 AFTER 触发器。

与标准触发器不同,INSTEAD
OF触发器可以定义在视图、表和更新视图上。

INSTEAD OF触发器不是用
来检测表中发生的更改,而是用来在更改发生前拦截这些更改,以便进行
处理。

INSTEADOF触发器具有多种应用,可以用来实现复杂的逻辑,还可以
替换有关的视图更新,而不必试图在表中使用触发器。

INSTEADOF触发器还可以用来管理分布式复制环境中的可能冲突。

例如,当多个客户端将更新发送到多个服务器时,可以使用INSTEADOF触发
器来确定谁是胜利者,谁可以更新表,而谁的更新将被丢弃。

INSTEAD OF触发器在SQL Server 2024 中也新增了一些功能。

例如,它可以在表上定义多个INSTEAD OF触发器,可以使用多条语句来定义触
发器,可以在INSTEAD OF触发器中定义新的标识符,以及可以在INSTEAD OF触发器中执行处理函数。

INSTEADOF触发器的使用除了可以替换传统触发器外,还可以实现一
些复杂或新的行为,可以替换更新视图,而不是更新表,可以控制分布式
复制环境中的多个客户端。

sqlserver数据库触发器的工作原理

sqlserver数据库触发器的工作原理

SQL Server数据库触发器是一种特殊类型的存储过程,它可以在数据库中的特定事件发生时自动执行。

触发器可以用于监视数据的变化并采取相应的操作,例如插入、更新或删除数据时触发某些业务逻辑。

本文将深入探讨SQL Server数据库触发器的工作原理,包括触发器的类型、创建和使用方法,以及一些最佳实践。

一、触发器的类型SQL Server中有两种类型的触发器:DML触发器和DDL触发器。

1. DML触发器DML触发器(Data Manipulation Language Trigger)是针对数据操作事件的触发器,包括INSERT、UPDATE和DELETE。

当这些事件发生时,DML触发器可以在受影响的表上自动执行相应的逻辑。

DML 触发器可以分为AFTER触发器和INSTEAD OF触发器。

- AFTER触发器:AFTER触发器在数据操作事件完成后触发,可以用于记录日志、更新其他相关表等操作。

- INSTEAD OF触发器:INSTEAD OF触发器可以代替原始的数据操作事件,允许用户在数据操作前执行自定义的逻辑,常用于数据验证和转换。

2. DDL触发器DDL触发器(Data Definition Language Trigger)用于监视数据库结构的变化,包括CREATE、ALTER和DROP等DDL语句的执行。

DDL触发器可以在这些数据库结构变化发生时执行相应的逻辑,如记录变更、阻止某些操作等。

二、触发器的创建和使用要创建触发器,首先需要使用CREATE TRIGGER语句定义并命名一个新触发器,然后指定触发器在哪些事件上触发,以及触发时执行的逻辑。

触发器逻辑通常是一段T-SQL代码,可以包含查询、条件判断、事务控制等操作。

1. 创建DML触发器要创建DML触发器,可以使用如下语法:```CREATE TRIGGER trigger_nameON table_nameAFTER/INSTEAD OF INSERT/UPDATE/DELETEASBEGIN-- trigger logicEND```在这个语法中,trigger_name是触发器的名称,table_name是触发器所在的表,AFTER/INSTEAD OF INSERT/UPDATE/DELETE指定触发的事件,BEGIN和END之间是触发器的逻辑代码。

《Oracle数据库应用与实践》课后习题参考答案

《Oracle数据库应用与实践》课后习题参考答案

第 5 章 Oracle 模式对象
一、填空题
1. 字段级约束 表约束
2. NOT NULL 约束 UNIQUE 约束 PRIMARY KEY 约束

3. CREATE TABLE
CREATE ANY TABLE
4. UNIQUE PRIMARY KEY CHECK
5. 合并索引 重建索引
6. user_updatable_columns
一、 填空题 1. 数据挖掘 隐含的 未知的 2. API-ODM Java API ODM DBMS_DM PL/SQL API
3. Clustering Association Feature Extraction
Oracle 数据库应用与实践
2、某 cc 表数据如下: c1 c2 -------------1西 1安 1的 2天 2气
Oracle 数据库应用与实践
3好 …… 转换为 1 西安的 2 天气 3好 要求:不能改变表结构及数据内容,仅在最后通过 SELECT 显示出这个查询结果
代码为: create or replace function x return varchar2 is type t_array is table of number index by binary_integer; type tarray is table of varchar2(10) index by binary_integer; ta t_array; tar tarray; re varchar2(10); n number; na varchar2(10); begin select id bulk collect into ta from (select id,name from xx order by id) group by id; for i in st loop dbms_output.put(ta(i)||' '); select name bulk collect into tar from xx where id=ta(i); for i in st loop dbms_output.put(tar(i)); end loop; dbms_output.put_line(' '); end loop; return re; end;

数据库技术:触发器简介

数据库技术:触发器简介
触发器
——触发器简介
教学内容
什么是触发器 触发器的类型和触发操作 触发器的功能
1 什么是触发器
触发器是一种特殊的存储过程,在语言事件发生时,所设置的触发器就会 自动被执行,以进行维护数据完整性,或其他一些特殊的任务。
与一般意义上的存储过程不同,触发器可以说是当发生DML或DDL语言事件 时自动执行的存储过程。不能直接被调用,也不能传递或接受参数。
2 触✎发器的类型和触发操作
(一)类型
➢DML触发器
是一种与表紧密关联的特殊的存储过程,当数据库中发生数据操作语言 (DML)事件时将调用DML触发器。
➢DDL触发器
与DML触发器一样,DDL触发器也是通过事件来激活并执行其中的SQL语 句。但与DML触发器不同,DDL触发器是在响应数据定义语言(DDL)语句 时激发。这些语句主要是以CREATE、ALTER和DROP开头的语句。
after和instead of触发器不同
功能 适用对象 每个表或视图 可用的数量 级联引用
执行时机
执行顺序
after 触发器

允许每个动作有 多个触发器
instead of触发器
表和视图
每个动作(update、delete 和insert)一个触发器
没有限制
在作为级联引用完整性约束 目标的表上限制应用
声明引用动作之后
在约束处理之前,代替了触 发动作
在创建inserted表和deleted表 在inserted表和deleted表创
触发时
建之后
可以指定第一个和最后一个触 发器执行动作
不适用
2 触✎发器的类型和触发操作
(二)触发操作
➢DML触发器
在建立DML触发器时,要指定触发操作:insert、update或delete。至少 要指定一种操作,也可以同时指定多种。在同一个表中可以创建多个after 触发器,但在表或视图上,每个insert、update或delete语句最多可以定义 一个instead of触发器。

DDL触发器与DML触发器比较

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 约束定义的限制更为复杂的其他限制。

Oracle INSTEAD OF 触发器

Oracle INSTEAD OF 触发器INSTEAD OF 触发器也称替代触发器,定义INSTEAD OF触发器后,用户对表的DML 操作将不再被执行,而是执行触发器主体中的操作。

通常情况下,INSTEAD OF触发器是定义在视图上的,而不是在表上定义的触发器,它是用来替换所使用实际语句的触发器。

因为一个视图通常是由多个基表连接而成,这种视图是不允许进行INSERT、UPDATE 和DELETE这样的DML操作。

当为视图编写INSTEAD OF触发器后,用户对视图的DML 操作就不会执行,而是执行触发器中的PL/SQL语句块,这样就可以通过在INSTEAD OF 触发器中编写适当的代码,完成对构成视图的各个表进行操作。

替代触发器与其他触发器类以,只是在触发器定义的头部使用INSTEAD OF子句。

下面通过一个示例来演示INSTEAD OF触发器的应用。

(1)创建一个视图,显示雇员的基本信息和所在部门名称。

SQL> connect system/admin已连接。

SQL> grant create view to scott;授权成功。

SQL> connect scott/tiger已连接。

SQL> create view emp_dep_view2 as select empno,ename,job,sal,dname3 from emp,dept4 where emp.deptno=dept.deptno;视图已创建。

(2)如果试图向表中添加记录,则由于视图引用了两个基表,所以添加记录将失败。

SQL> insert into emp_dep_view(empno,ename,job,sal,dname)2 values(8000,'董鹏','MANAGER',1500,'SALES');insert into emp_dep_view(empno,ename,job,sal,dname)*第 1 行出现错误:ORA-01776: 无法通过联接视图修改多个基表(3)现在为视图EMP_DEP_VIEW创建一个INSTEAD OF触发器,以便使用自定义的操作覆盖系统预定义的操作。

数据库触发器分类

Server2008数据库约束、默认值和规则的完整性检查逻辑。
4 DML触发器
1)按照DML事件类型的不同,可以将DML触发器分为: Insert触发器、Delete触发器、Update触发器,它们分别在对表进行insert、
delete、update操作时执行。 2)按照触发器和触发事件操作时间的不同,可以将DML触发器分为:n of database trigger
2
知识点内容概要
DML触发器 DDL触发器
3 DML触发器
DML触发器是当数据库服务器中发生数据操作语言(DML)事件时要执行的操 作。
DML事件包括对表或视图发出的insert、delete、update语句。 DML触发器用于在数据被修改时,强制执行业务规则,以及扩展SQL
After触发器和Instead of触发器,主要是对于数据insert、delete、update操 作的处理不同。
After触发器:功能与For相同,在insert、delete、update语句操作后执行。 Instead of触发器:在insert、delete、update语句执行时执行触发器。
5 DDL触发器
DDL触发器是SQL Server2008的新增功能。 它是一种特殊的触发器,在响应数据定义语言(DDL)语句时触发。 该触发器一般用于在数据库中执行管理任务。例如,审核以及规范数据库操作。

oracle 触发器的种类和触发事件,dml触发器,ddl事件触发器,替代触发器,查看触发

oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发...oracle 数据库开发应用实例,招生录取系统 ... | oracle 创建,删除存储过程,参数传递,创 ...2009-04-14oracle 触发器的种类和触发事件,DML触发器,DDL事件触发器,替代触发器,查看触发器,关键字: oracle 触发器种类触发事件dml ddl 事件替代查看触发器的种类和触发事件触发器必须由事件才能触发。

触发器的触发事件分可为3类,分别是DML事件、DDL事件和数据库事件。

每类事件包含若干个事件,如下所示。

数据库的事件是具体的,在创建触发器时要指明触发的事件。

种类关键字含义Sql代码DML事件(3种) INSERT 在表或视图中插入数据时触发UPDATE 修改表或视图中的数据时触发DELETE 在删除表或视图中的数据时触发DDL事件(3种) CREATE 在创建新对象时触发ALTER 修改数据库或数据库对象时触发DROP 删除对象时触发数据库事件(5种) STARTUP 数据打开时触发SHUTDOWN 在使用NORMAL或IMMEDIATE选项关闭数据库时触发LOGON 当用户连接到数据库并建立会话时触发LOGOFF 当一个会话从数据库中断开时触发SERVERERROR 发生服务器错误时触发DML事件(3种) INSERT 在表或视图中插入数据时触发UPDATE 修改表或视图中的数据时触发DELETE 在删除表或视图中的数据时触发DDL事件(3种) CREATE 在创建新对象时触发ALTER 修改数据库或数据库对象时触发DROP 删除对象时触发数据库事件(5种) STARTUP 数据打开时触发SHUTDOWN 在使用NORMAL或IMMEDIATE选项关闭数据库时触发LOGON 当用户连接到数据库并建立会话时触发LOGOFF 当一个会话从数据库中断开时触发SERVERERROR 发生服务器错误时触发触发器的类型可划分为4种:数据操纵语言(DML)触发器、替代(INSTEAD OF)触发器、数据定义语言(DDL)触发器和数据库事件触发器。

触发器总结

触发器总结触发器的基本概念触发器是指隐含执行的存储过程。

是特定事件出现的时候,自动执行的代码块。

类似于存储过程,但是用户不能直接调用他们。

触发器的语法:createorreplacetriggertrigger_nameafter/beforeinsertorupdateordeleteontable_namereferencingoldasold_valuenewasnew_valueforeachrow/foreachstatementbegin代码块;end;语法解析:1、createorreplace创建一个触发器。

Replace表示当触发器存在相同的触发器时,替换掉已存在的触发器。

2、after/before表示触发时机。

事件之前执行还是事件之后执行。

3、insert/update/delete触发器监控的事件4、ontable_name触发器监控的表:table_name5、foreachrow行触发器。

每操作一行就触发一次foreachstatement语句触发器。

针对指定语句激活一次。

6、referencing设置参照变量,as表示作为。

old_value,new_value 行变量。

分别表示事件发生前/后的数据所在的行。

即old_value表示操作前的数据,new_value表示操作后的数据。

可以用old_value.字段名、new_value.字段名,调用相应的字段。

触发器的功能允许/限制对表的操作自动生成派生列,例如自增字段强制数据一致性提供审计和日志管理防止无效的事务处理启用复杂的业务逻辑触发器的组成1、触发器名称2、触发语句3、触发器限制4、触发操作Instance:createtriggerbiufer_employees_department_id beforeinsertorupdateofdepartment_idonemployeesreferencingoldasold_valuenewasnew_valueforeachrowwhen(XXX80)begin:XXX:=0;end;1、触发器名称:createtriggertrigger_name2、触发语句:before/afterinsertorupdateof[ColumnsName||department_id]on[TableName||employees]referencingoldasold_valuenewasnew_valueforeachrow说明:1、表或视图上的DML语句DDL语句数据库关闭或启动,startupshutdown等等2、无论是否规定了department_id,对employees表进行insert的时候都会触发3、对employees表的department_id列进行update的时候也会触发触发器。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DDL触发器(SQL Server 2005之后被引入)就是INSTEAD OF触发器
这是错误的
DDL触发器的实现原理其实就是一个AFTER触发器。

这个意思是先发生DDL操作,然后触发器再捕捉操作(当然如果你在触发器内写了Rollback,则也可能回滚)。

存在Rollback也意味着这个触发器并不像你想象的那么轻量,来看下面的例子:
ALTER TABLE MyBigTable ADD MyNewNonNullColumn VARCHAR (20) DEFAULT 'Paul'
如果存在一个defined for ALTER_TABLE事件的DDL触发器,或是一个更宽泛的事件比如DDL_TABLE_EVENTS。

上面那个DDL代码将会对表中每一行数据加进新列,之后触发触发器操作。

如果你的触发器中存在回滚来阻止DDL操作发生,那么这个代价可不小(不信的话你自己看看这么做后产生的日志)。

当然更好的办法是对ALTER设置GRANT或是DENY权限,或是仅仅允许通过你创建的存储过程进行DDL操作。

但不管怎么样,虽然DDL触发器可以达到禁止DDL的操作的目的,但代价昂贵。

而DDL触发器的好处是允许记录某些人做了某些修改表之类的操作,所以我并不是说不允许DDL触发器,而是要小心使用。

相关文档
最新文档