作者:潘PanPanPq | 来源:互联网 | 2023-06-01 18:40
触发器分为两种,一种与数据表绑定,响应数据表指定动作(insert、delete或update),此处称为表级;一种与数据库本身绑定,响应数据定义语句(主要是CREATE、ALTE
触发器分为两种,一种与%ign ore_a_1% 表绑定,响应数据表指定动作( ins ert、 delete 或 update ),此处称为表级;一种与数据库 本身绑定,响应数据定义语句(主要是 create、 alter 和 drop 开头 的语句 ),此处称为库级。本篇以下所说触发器皆指表级触发器。
触发器 是一段有特定语法,实现一定功能的 sql语句,它与数据表绑定,当数据表发生指定动作( insert、 delete 或 update )时,由数据库自动调用。一个触发器必须且只能绑定一张数据表,必须且只能绑定数据表的一个动作( insert、 delete 或 update )。 触发器可以分为两种,一种是动作之后( after),一种是替代执行( instead of )。两种触发器可以同时绑定数据表的同一个动作( insert 、 delete 或 update )。但动作之后( after )触发器可以同时绑定多个,而替代执行( instead of )触发器一个数据表只能绑定三个,即一个动作( insert 、 delete 或 update )只能绑定一个。
触发器耗费性能,不易调试,不利于迁移,不符合时兴的面向对象设计 理念,也不容易被接手老项目的人注意到,因而 应 尽量避免使用。
触发器语法:
创建: create trigger trigger_name --触发器的名字 on {table_name | view_name} --与触发器绑定的表或视图,必须且只能与一个表或视图绑定 {for | after | instead of } --触发器类型,动作之后(after)或替代执行(instead of) [ insert, update,delete ] --触发器响应的具体动作,一个触发器只能响应一个动作 as sql_statement --你需要编写的sql语句
删除: drop trigger { trigger/*要删除的触发器名字*/ } [ ,...n ]
修改: alter trigger trigger_name --触发器的名字 on table_name --与触发器绑定的表或视图,必须且只能与一个表或视图绑定 {for | after | instead of } --触发器类型,动作之后(after)或替代执行(instead of) {[delete][,][insert][,][update]}--触发器响应具体动作,一个触发器只能响应一个动作 as sql_statement; --你需要编写的sql语句
禁用启用触发器: 禁用:alter table 表名 disable trigger 触发器名称 启用:alter table 表名 enable trigger 触发器名称
触发器执行后会自动创建两张虚表inserted与 deleted 。它们可以理解为系统 自动创建的、在触发器中使用的临时表,触发器开始时创建,结束后删除。它们的结构与触发器绑定的表结构一致,并且是只读的。
动作
inserted
deleted
增加(insert )
存放增加的记录
无
删除(delete )
无
存放被删除的记录
修改(update )
存放更新后的记录
存放更新前的记录
当数据表只存在动作之后( after)触发器时,动作( insert 、 delete 或 update )对数据表进行真实更改,而存在替代执行( instead of )触发器时,动作( insert 、 delete 或 update )不对数据表进行真实更改。替代执行( instead of )触发器执行时间先于动作之后( after )触发器。有多个动作之后( after )触发器时,执行顺序取决于触发器建立时间,先建立的先执行。
触发器中不能使用以下语句:
create 语句,如:create database、create table、create index 等。 alter 语句,如:alter database、alter table、alter index 等。 drop 语句,如:drop database、drop table、drop index 等。 disk 语句,如:disk init、disk resize。 load 语句,如:load database、load log。 restore 语句,如:restore database、restore log。 return 语句,如return 0.
===================================================================================== 数据库技术:SQL Server基础之表级触发器只代表本人的见解,可能存在错误,仅用于技术交流。如果你喜欢该文,可以扫下面的二维码打赏我(打赏敬请备注“博客园打赏”五字)。
需要了解更多数据库技术:SQL Server基础之表级触发器,都可以关注数据库技术分享栏目—编程笔记