欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

利用SQL Server 2005触发器保证数据完整性之研究

时间:2011-04-23  作者:秩名

论文导读:在设计大型数据库时,保证数据的完整性是其中一项非常重要的内容。SQLServer2005提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。根据引起执行触发器操作的语言不同,可以将其分为DML触发器和DDL触发器。其中DDL触发器是SQLServer2005的新增功能,当服务器或数据库中发生数据定义语言事件时将调用这些触发器。
关键词:数据库,完整性,DML触发器,DDL触发器
 

在设计大型数据库时,保证数据的完整性是其中一项非常重要的内容。SQL Server 2005提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,当表中的数据发生更新时将自动调用。约束只能对当前表中的列进行限制,而触发器则可以查询其他表,并可以包含复杂的T-SQL语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到严重的错误,则整个事务自动回滚,它可以实现比CHECK约束更复杂的数据完整性。

根据引起执行触发器操作的语言不同,可以将其分为DML触发器和DDL触发器。其中DDL触发器是SQL Server 2005的新增功能,当服务器或数据库中发生数据定义语言事件时将调用这些触发器。无论是DML触发器还是DDL触发器都可以实现嵌套,最多可以嵌套32层。

一、DML触发器

DML触发器是当数据库服务器的中发生数据操作语言(Data ManipulationLanguage)事件时执行的触发器,根据DML触发器发生的时间、编写触发器所使用的语言,可以分为AFTER触发器和INSTEAD OF触发器。

1、AFTER触发器

AFTER触发器是在执行数据记录更新(增加INSERT、删除DELETE和更新UPDATE)操作、INSTEAD OF触发器和约束之后被激发的,通过指定AFTER或FOR关键字来请求AFTER触发器,用于在记录发生变化之后的检查和处理,一旦发现错误,使用rollback回滚到更新之前的记录。

一个表中可以具有多个AFTER触发器,只要名称不同即可,每个触发器只能用于一张表,但是一个触发器可以同时用于一个表的三个用户操作(insert、update和delete)。

use student

go

create table stud

(

snovarchar(8) constraint pk_sno primary key,

snamevarchar(8) not null

)

go

create table users

(

unamevarchar(8) constraint pk_uname primary key,

upwdvarchar(8) not null,

)

go

create trigger insertusers

on student

for insert

as

insert into users selectsno,sno from inserted;

go

insert into stud values('1001','张三')

在向stud表中插入一条新记录后,由于触发器insertusers的作用,将向users表中也插入一条记录,使该学生成为当前数据库的合法用户。

2、INSTEAD OF触发器

可以为表和视图定义INSTEAD OF触发器,INSTEAD OF触发器是在处理约束之前被激发,其主要优点是:使不能更新的视图支持更新(基于多个基表的视图必须使用INSTEAD OF触发器来对多个表中的数据进行插入、更新和删除操作),另一个优点是允许在批处理中某些部分成功的同时,能够拒绝批处理中的其他部分。论文大全。

二、DDL触发器

DDL触发器是SQL Server2005的新增功能,为响应多种数据定义语言语句而触发。DDL触发器用于执行和管理任务,只能在T-SQL语句完成之后运行,无法作为INSTEAD OF触发器使用。

DDL触发器与DML触发器也有许多相似之处,如它们都可以运行在.NET Framwork中创建的托管代码,也可以为同一个T-SQL语句创建多个DDL触发器,DDL触发器和激发它的语句运行在相同的事务中,可从触发器中回滚事务,DDL触发器也可以实现嵌套。

1、具有数据库作用域的DDL触发器

数据库作用域的DDL触发器作为其中的对象存储在数据库中,可以从创建DDL触发器的数据库的sys.triggers目录视图(也可以使用数据库名限定要查找的视图)中获取有关DDL触发器的信息。

创建数据库作用域的DDL触发器:其中safe是DDL触发器的名字,on database是指定触发器的作用域范围是当前数据库,当发生for关键字后面的create_table、alter_table和drop_table操作时将激发该触发器。

create trigger safe

on database

for create_table,alter_table,drop_table

as

print'要创建、修改和删除表,必须先禁用或删除safe触发器'

rollback;

go

create table stu

(

snovarchar(8) primary key,

snamevarchar(8)

)

其中for create_table,alter_table,drop_table也可改为for ddl_table_events,若指定for ddl_table_view_events的DDL触发器,则涵盖ddl_table_events、ddl_view_events、ddl_index_events和ddl_statistics_events下的所有T-SQL语句。

2、服务器作用域的DDL触发器

服务器范围内的DDL触发器作为对象存储在master数据库中,可以从任一数据库的sys.triggers目录视图中获取服务器范围内的DDL触发器的信息。在创建触发器时指定on all server关键字,则该触发器的作用域是当前服务器实例上的任何一个数据库,当发生for或after关键字后面的指定的事件时,将激发该触发器。

create trigger ropdatabase

on all server

for drop_database

as

print'要删除数据库,必须先禁用createdropdatabase触发器'

rollback;

go

创建该触发器之后,不允许在当前服务器实例上删除数据库。

3、使用EVENTDATA函数捕获激发DDL触发器的事件信息

若需要返回有关服务器或数据库事件的信息可以使用EVENTDATA函数,但是,只有在DDL触发器内部直接引用时,EVENTDATA函数才会返回数据,负责将返回NULL。EVENTDATA返回的数据类型是xml的值,其中包含事件发生的时间、执行处罚期的连接的系统进程ID(SPID)和激发触发器的事件类型等。

use student

go

create trigger safety

on database

for drop_table

as

selecteventdata();

rollback;

go

在创建了safety触发器后,在student数据库中执行drop table语句时将激发该触发器,返回由EVENTDATA函数捕获的事件信息(XML信息),并回滚drop table语句操作。论文大全。若要从XML数据中检索出所需要的内容,可以使用XML数据类型的value()方法。论文大全。

三、总结

触发器能够保证数据的完整性与一致性,实现复杂的业务逻辑规则,在数据库开发与设计过程中扮演着一个非常重要的角色。实现强化约束、跟踪变化、级联运行、保护数据库架构不被非法修改等功能,根据用户需求,简化业务逻辑,减少编写前台功能代码的劳动强度,是实现数据维护规则的有效机制。


参考文献:
【1】AndrewJ.Brust Stephen Forte著,贾洪峰译,精通SQL Server 2005程序设计,清华大学出版社,2007。
【2】明日科技编著,张立科 编辑,SQL Server 2005开发技术大全,人民邮电出版社,2007。
 

 

查看相关论文专题
加入收藏  打印本文
上一篇论文:利用MicrosoftExcel宏编辑实现黄土湿陷量计算自动化(图文)
下一篇论文:利用VBA和数据库技术结合制作交互性课件(图文)
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文