前言:
触发器是一种特殊类型的存储过程,是为响应数据操作语言(DML) 事件或数据定义语言(DDL)事件而执行的存储过程。当用户对表进行相应操作时,触发器交自动执行。触发器可以基于表创建,也可以基于视力创建。因此常常用于复杂的业务规则。
创建触发器
触发器是数据库独门是。当一个事件发生时,触发器自动地隐式运行。但是,触发器不能接收参数。SQL 支持3种类型的触发器: Install (插入)、Update (更新)、Delete(删除)。当向表插入数据、更新数据、删除数据时,触发器就被调用。
语法:
Create Trigger trigger_name
On { table | view }
[ With Encryption ]
{
{
{ For | After | Instead Of } { [ Insert ] [ , ] [ Update ] [ , ] [ Delete ] }
[ With Append ]
[ Not For Replication ]
As
[
{ If Update ( column )
[ { And | Or } Update ( column ) ]
[ …n ]
| If ( Columns_Updated () { Bitwise_operator } Updated_bitmask )
{ comparison_operator } column_bitmask […n]
}
]
sql_statement […n]
}
}
参数说明:
trigger_name:触发器的名称。触发器名称必须符合标识符规则,并且在数据库中必须{wy}。可以选择是否指定触发器所有者名称。
table | view:是在其上执行触发器的表或视图,有时称为触发器表或触发器视图。可以选择是否指定表或视图的所有者名称。
With Encryption:加密 syscomments 表中包含 create trigger 语句文本的条目。使用 with encryption 可防止将触发器作为 SQL Server 复制的一部分发布。
After:指定触发器只有在触发 SQL 语句中指定的所有操作都已成功执行后才激发。所有的引用级联操作和约束检查也必须成功完成后,才能执行此触发器。如果仅指定 For 关键字,则 After 是默认设置。不能在视图上定义 After 触发器。
Instead Of: 指定执行触发器而不是执行月收入SQL语句,从而替代触发语句的操作。在表或视图上,每个 Install 、Update 或 Delete 语句最多可以定义一个 Instead Of 触发器。然而,可以在每个具有 Instead Of 触发器的视图上定义视图。
Instead Of 触发器不能在 With Check option 的可更新视图上定义。如果向指定了With Check option 选项的可更新视图添加 Instead Of 触发器,SQL Server 将产生一个错误。用户必须用 Alter View 删除该选项后才能定义 Instead Of 触发器。
[ Insert ] [ , ] [ Update ] [ , ] [ Delete ]:是指定在表或视图上执行哪些数据修改语句时将xx触发器的关键字。必须至少指定一个选项。在触发器定义中允许使用以任意顺序组合的这些关键字。如果指定的选项多于一个,需用逗号分隔这些选项。对于 Instead Of 触发器,不通话在具有 On Delete 级联操作引用关系的表上使用 Delete 选项。同样,也不通话在具有 On Update 级联操作引用关系表上使用 Update 选项。
With Append:指定应该添加现有类型的其他触发器。只有当兼容级别是65或更低时,才需要使用该可选子句。如果兼容级别是70或更高,则不必使用 With Append 子句添加现有类型的其他触发器。
Not For Replication:表示当复制进程更改触发器所涉及的表时,不应执行该触发器。
As:是触发器要执行的操作。
sql_statement:是触发器的条件和操作。触发器条件指定其他准则,以确定 Delete、Insert 或 Update 语句是否导致执行触发器操作。当尝试 Delete、Insert 或 Update 中的触发器创建语法有较大的差别。语法如下:
create trigger trigger_name
[ before | after ] trigger_event
on table_reference
[ for each row [ when trigger_condition ] ]
trigger_body
参数说明:
trigger_name:触发器的名称。
before | after:指明了触发器是在数据更新前,还是数据更新后被xx。
trigger_event:指定触发时间。可以为 Insert、Update、Delete。如果要创建 Instead of 触发器可活力前面的 Before 或 after 关键字。
on子句: 指定了基于某张表创建的触发器。
for each row:指明了每次插入、更新或删除一行时就调用触发器。如果没有这一个选项,则只对整个表执行一次。
when子句:是可选的,用于指明搜索条件,当满足某一条件时会调用触发器。
trigger_body:为触发器执行的,这些语句是放在 begin and 语句块中。在 Oracle 中,应用触发器要注意以下几点:
* 触发器中不能使用控制语句、事务管理语句,如 commint 语句、rollback 语句、svaepoint 语句。对于创建的系统触发器允许使用 Create 语句、Alter 语句、Drop语句。
* 由触发器调用的存储过程或函数同样不允许使用控制语句。
* 触发器中不允许使用 longrae、long数据类型。
实际举例(insert触发器):
use 数据库名
go
create trigger 触发器名
on 表名
after insert <注:如果是创建 update 或 delete 触发器,那么在上一行加上“with encryption”,把这里的 insert 改成 update 或 delete 即可>
as
print ('打印出一条信息!')
go
insert into 操作表名 values(数值1,数值2)
当你向“操作表”插入一条数据时,触发器就执行了,在输出窗口打印“打印一条信息”。
修改触发器
语法:
alter trigger trigger_name
………
……
…
删除触发器
语法:
drop trigger { trigger_name } [ …n ]
未完待续,敬请xx……