细谈——触发器
来源:互联网 发布:手持终端扫描不到网络 编辑:程序博客网 时间:2024/05/21 22:38
一张清晰的图,勾起你学习的兴趣:
详细的内容介绍满足你学习的热情:
壹:触发器的基本内容
一,概念:
是一种特殊类型的存储过程。
又不同于普通的存储过程。
主要区别:1,触发器主要是通过事件进行触发而被执行的(例如:插入、修改或删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,以确保数据的完整性)
2,而存储过程可以通过存储过程的名称直接被调用。
二,功能:
1,级联修改数据库中相关的表
例如:数据库company中有两个表:
(本表纯属虚构,请勿模仿)
project表:
项目信息
项目合作客户名
2012年7月30号翻盖狼房师范学院
韩学敏
2012年8月3号收购世纪石油学院
陈金荣
2012年8月4号起诉圆晨
李双喆
2010年8月6号捐资孤儿院
李双喆
customer表:
客户名
公司
职务
陈金荣
家里蹲大学
校长
李双喆
无所事事企业
公关部门总经理
韩学敏
游手好闲有限公司
总裁
如上两张表:如果在project表中将所有客户名为“李双喆”的字段改为null或其他值,或者删除整条和“李双喆”有关的记录,而使用触发器就可以实现这样的功能。
2,执行比核查约束更为复杂的约束操作。
(在触发器中可以书写更为复杂的T—SQL语句。例如:可以引用多个表,并使用if...else等语句做更复杂的检查)
3,拒绝或回滚违反引用完整的操作。检查对数据表的操作是否违反引用完整性,并选择相应的操作。
4,比较表修改前后之间的差别,并根据差别采取相应的操作。
例如:若想规定每次工资的变动幅度不能超过40%,使用触发器可以将改后的表数据和修改前的表数据进行比较,若超出40%,可以回滚该修改操作。
三,类型(5种):
1,Update触发器:进行更新操作时触发。
2,Insert触发器:进行插入操作时触发。
3,Delete触发器:进行删除操作时触发。
4,Instead of触发器:不执行插入、更新、删除操作时,将触发Instead of触发器。
5,After触发器:在一个触发动作发生之后激发,并提供一种机制以便控制多个触发器的执行顺序。
(注意:1,Insert of和After触发器是SQL Server2000新增的触发器。
2,须知After触发器(1)要求只有执行某一操作(Insert、Update、Delete)之后触发器才被触发,且只能在表上定义。(2)可以为针对表的同一操作定义多个触发器。(3)After触发器可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder来完成此任务。
3,须知Instead of触发器:(1)此触发器表示并不执行其所定义的操作(Insert、Update、Delete)而仅是执行触发器本身。(2)既可在表上定义Instead of触发器,也可以在视图上定义;但对同一操作只能定义一个。)
四,主要优点:
1,触发器是自动的:当对表中的数据作了任何修改(比如手工输入或者应用程序才去的操作)之后立即被激活。——一触即发
2,触发器可以通过数据库中的相关表进行层叠更改。
3,触发器可以强制限制,这些限制比用Check约束所定义的更复杂。而且比使用核查约束更为方便的是,触发器可以引用其他数据表中的列。
五,创建触发器的规则和限制:
1,Create Trigger语句必须是批处理中的第一个语句,且该批处理中随和出现的其它所有语句都将被解释为Create Trigger语句定义的一部分。
2,在默认情况下,创建触发器的权限将分配给数据表的所有者,且不能将该权限转给其它用户。
3,触发器是数据库对象,其名称必须遵循标识符的命名规则。
4,虽然触发器可以引用当前数据库以外的对象,但只能在当前数据库中创建触发器。
5,虽然不能在临时数据表上创建触发器,但是触发器可以引用临时数据表。
6,既不能在系统数据表上创建触发器,也不可以引用系统数据表。
7,在包含使用delete或update操作定义的外键的表中,不能定义instead of 和instead of update触发器。
8,虽然Trucate Table语句类似于没有Where子句(用于删除行)的Delete语句,丹他并不会引发Delete触发器,因为Truncate Table语句没有被记入日志。
9,Writetext语句不会引发insert或update触发器。
10,下面的语句不可以用于创建触发器:Alter Database、Create Database、Disk Init、Disk Resize、 Drop Database、Load Database、Load Log、Reconfigure、Reconfigure、Restore Database、Restore Log
11,当创建一个触发器时必须指定:(1)名称(2)在其上定义触发器的表(3)触发器将何时激发;(4)激活触发器的数据修改语句
贰:触发器的管理
一,使用企业管理器管理:
1,创建
2,查看:(1)查看相关数据;
(2)查看定义文本;
3,修改
4,删除
二,使用T—SQL语句管理:
1,创建
2,查看:(1)查看相关数据;
(2)查看定义文本;
(3)查看所有者和创建日期
3,修改
4,删除
详细介绍使用T—SQL语句管理触发器:
1,创建:
(1)语法格式:
Create Trigger trigger_name
On Table| View
[With Encryption]
{For | Afrer | Instead of}
{ [Insert] [, ] [Update] [, ] [Delete] }
AS
sql_statements [...n]
(2)各参数说明:
trigger_name:是用户要创建的触发器的名字。触发器的名字必须符合MS SQL Server 的命名规则,且其名字在当前数据库中必须是惟一的
Table:是与用户创建的触发器相关联的表的名字,并且该表已经存在。
WITH ENCRYPTION:表示对包含有CREATE TRIGGER 文本的syscomments 表进行加密
[DELETE] [,] [INSERT] [,] [UPDATE]:关键字用来指明哪种数据操作将激活触发器,至少要指明一个选项,在触发器的定义中三者的顺序不受限制,且各选项要用逗号隔开。
AFTER:表示只有在执行了指定的操作INSERT、DELETE、UPDATE 之后触发器才被激活,执行触发器中的SQL语句。若使用关键字FOR ,则表示为AFTER 触发器,且该类型触发器仅能在表上创建。
INSTEAD OF:当为表或视图定义了针对某一操作INSERT、 DELETE、UPDATE 的INSTEAD OF 类型触发器,且执行了相应的操作时,尽管触发器被触发,但相应的操作并不被执行,而运行的仅是触发器SQL 语句本身。
(3)例子:
Use company
Go
--创建触发器
Create trigger 触发器_欢迎新员工
On employee
After insert
As
Print ‘新员工加入本公司,欢迎欢迎!’
go
--创建触发器
Create trigger 触发器_员工走了
On employee
After delete
As
Print ‘真遗憾你离开公司!’
go
Set nocount on
--插入一条记录试试触发器操作
Insert into employee(员工id,姓名,性别,工资)
Values(20068,’赵一’,‘男’,1000)
--删除一条记录试试
Delete from employee
Where 员工id = ‘20067’
go
2,查看:
(1)查看相关数据:
语法:exec_helptrigger 'table' [,'type']
参数说明:table:触发器所在的表名
Type:指定列出的操作类型的触发器。若不指定,则列出所有的 触发器
例子:exec sp_helptrgger 'employee'
(2)查看定义文本:
语法:Sp_helptext'trigger_name'
例子:exec sp_helptext'触发器_欢迎新员工'
(注意:若在定义触发器时对定义文本进行加密处理,则不能使用任何方法查看触发器的定义文本。)
(3)查看所有者和创建日期:
语法:exec sp_help 'trigger_name'
例子:exec sp_help'触发器_欢迎新员工'
3,修改:
语法格式:
ALTER TRIGGER trigger_name
ON table|view
[WITH ENCRYPTION]
{FOR | AFTER | INSTEAD OF }
{ [DELETE] [,][INSERT][,][UPDATE]}
AS
sql_statement[...n]
(注意:就是创建触发器的语句中的create换为alter,其余部分完全相同。但是在alter trigger中引用的触发器名必须是已经存在的触发器名)
4,删除:
语法格式: Drop trigger trigger_name [,...n]
例子:Drop trigger触发器_员工走了
(注意:当删除数据表时,也将同时删除所有与该数据表相关联的触发器。而且当删除触发器时,系统也将从sysobjects和syscomments系统表中删除有关该触发器的信息。)
- 细谈——触发器
- 信用管理——分销商管理细谈
- 细谈——索引重点内容
- 细谈C++中的强制转换——淘宝笔试归来
- Hibernate学习——(二)细谈类功能
- 数据库——触发器
- oracle——触发器
- 触发器——scheduleOnce
- 【SQL】——触发器
- mysql——触发器
- mysql——触发器
- 数据库——触发器
- 细谈volatile限定符——上海先锋商泰面试归来
- 数据库原理——触发器
- SQLServer数据库——触发器
- SQL Server——触发器
- Oracle——15触发器
- 笔试题——触发器
- SAX--Simple API for XML
- Java学习札记13:浅析Java中的String、StringBuffer和StringBuilder的区别
- iphone实用小技巧
- Java Socket编程(五)NIO
- 编程珠矶 第十三章 位图的实现
- 细谈——触发器
- 人类到目前为止发现的唯一一个素数公式
- WP7图片从独立存储绑定
- Eclipse插件
- JDBC
- C 电子时钟
- MRTG—网络流量监控工具 windows和linux上的安装和使用配置方法 第二十一集 Mrtg系统监控
- 1003
- linux中waitpid函数用法