数据库触发器小结
数据库触发器小结
触发器的概念、分类与作用
触发器是一种特殊类型的存储过程。
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。
触发器有4个要素:
Ø 名称:触发器有一个符合标志符命名规则的名称。
Ø 定义的目标:触发器必须定义在表或者视图上。
Ø 触发条件:是UPDATE、INSERT还是DELETE语句。
Ø 触发逻辑:触发之后如何处理。
触发器的种类
Ø AFTER触发器
AFTER触发器是告诉SQL语句执行了INSERT、UPDATE或者DELETE操作后干什么。
Ø INSTEAD OF触发器
告诉当要执行INSERT、UPDATE或DELETE操作时用什么别的操作来代替。
触发器的作用
Ø 强化约束:触发器能够实现比CHECK约束更为复杂的约束
Ø 跟踪变化:触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的变化。
Ø 级联运行
Ø 存储过程的调用
触发器的工作原理
SQL Server在工作时为每个触发器在服务器的内存上建立两个特殊的表:插入表和删除表。
Ø (1) 插入表的功能
一旦对该表执行了插入(INSERT)操作,那么对该表插入的所有行来说,都有一个相应的副本存放到Inserted表中,即Inserted表用来存储原表插入的内容。
Ø (2)删除表的功能
一旦对该表执行了删除(DELETE)操作,则将所有的删除行存放至Deleted表中。这样做的目的是,一旦触发器遇到了易做图它中止的语句被执行时,删除的那些行可以从Deleted表中得以还原。
创建触发器
在创建触发器以前必须考虑到以下几个方面:
Ø CREATE TRIGGER语句必须是批处理的第一个语句。
Ø 表的所有者具有创建触发器的缺省权限,表的所有者不能把该权限传给其他用户。
Ø 触发器是数据库对象,所以其命名必须符合命名规则。
Ø 尽管在触发器的SQL语句中可以参照其他数据库中的对象,但是触发器只能创建在当前数据库中。
Ø 虽然触发器可以参照视图或临时表,但不能在视图或临时表上创建触发器,只能在基表或在创建视图的表上创建触发器。
Ø 一个触发器只能对应一个表,这是由触发器的机制决定的。
[例] 创建一个触发器,当向S表中插入一条记录时,自动显示S表中的记录。
CREATE TRIGGER ChangeDisplay
ON S
FOR INSERT
AS
SELECT * FROM S
查看触发器
使用系统存储过程查看触发器
Ø EXEC sp_help '触发器名'
了解触发器的一般信息,如触发器的名字、属性、类型、创建时间
Ø EXEC sp_helptext '触发器名'
查看触发器的正文信息
Ø EXEC sp_depends '触发器名'
Ø EXEC sp_depends '表名 '
查看指定触发器所引用的表或指定的表所涉及到的所有触发器
Ø 修改触发器
使用sp_rename修改触发器的名字
sp_rename oldname,newname
Ø 删除触发器
用系统命令DROP TRIGGER删除指定的触发器
DROP TRIGGER 触发器名
注:删除触发器所在的表时,SQL Server将自动删除与该表相关的触发器。
触发器的概念、分类与作用
触发器是一种特殊类型的存储过程。
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。
触发器有4个要素:
Ø 名称:触发器有一个符合标志符命名规则的名称。
Ø 定义的目标:触发器必须定义在表或者视图上。
Ø 触发条件:是UPDATE、INSERT还是DELETE语句。
Ø 触发逻辑:触发之后如何处理。
触发器的种类
Ø AFTER触发器
AFTER触发器是告诉SQL语句执行了INSERT、UPDATE或者DELETE操作后干什么。
Ø INSTEAD OF触发器
告诉当要执行INSERT、UPDATE或DELETE操作时用什么别的操作来代替。
触发器的作用
Ø 强化约束:触发器能够实现比CHECK约束更为复杂的约束
Ø 跟踪变化:触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的变化。
Ø 级联运行
Ø 存储过程的调用
触发器的工作原理
SQL Server在工作时为每个触发器在服务器的内存上建立两个特殊的表:插入表和删除表。
Ø (1) 插入表的功能
一旦对该表执行了插入(INSERT)操作,那么对该表插入的所有行来说,都有一个相应的副本存放到Inserted表中,即Inserted表用来存储原表插入的内容。
Ø (2)删除表的功能
一旦对该表执行了删除(DELETE)操作,则将所有的删除行存放至Deleted表中。这样做的目的是,一旦触发器遇到了易做图它中止的语句被执行时,删除的那些行可以从Deleted表中得以还原。
创建触发器
在创建触发器以前必须考虑到以下几个方面:
Ø CREATE TRIGGER语句必须是批处理的第一个语句。
Ø 表的所有者具有创建触发器的缺省权限,表的所有者不能把该权限传给其他用户。
Ø 触发器是数据库对象,所以其命名必须符合命名规则。
Ø 尽管在触发器的SQL语句中可以参照其他数据库中的对象,但是触发器只能创建在当前数据库中。
Ø 虽然触发器可以参照视图或临时表,但不能在视图或临时表上创建触发器,只能在基表或在创建视图的表上创建触发器。
Ø 一个触发器只能对应一个表,这是由触发器的机制决定的。
[例] 创建一个触发器,当向S表中插入一条记录时,自动显示S表中的记录。
CREATE TRIGGER ChangeDisplay
ON S
FOR INSERT
AS
SELECT * FROM S
查看触发器
使用系统存储过程查看触发器
Ø EXEC sp_help '触发器名'
了解触发器的一般信息,如触发器的名字、属性、类型、创建时间
Ø EXEC sp_helptext '触发器名'
查看触发器的正文信息
Ø EXEC sp_depends '触发器名'
Ø EXEC sp_depends '表名 '
查看指定触发器所引用的表或指定的表所涉及到的所有触发器
Ø 修改触发器
使用sp_rename修改触发器的名字
sp_rename oldname,newname
Ø 删除触发器
用系统命令DROP TRIGGER删除指定的触发器
DROP TRIGGER 触发器名
注:删除触发器所在的表时,SQL Server将自动删除与该表相关的触发器。