SQL Server中触发器与约束的应用比较

2012-04-29 02:31:34高水娟
电脑知识与技术 2012年1期
关键词:触发器约束

高水娟

摘要:SQL Server提供了两种主要机制来强制执行业务规则和数据完整性:约束和触发器。约束主要用于确保输入到列中的数据满足特定的条件。触发器是一种特殊类型的存储过程,当表中的数据发生更新时将自动调以响应insert、update、delete语句。

关键词:约束;触发器;数据完整性

中图分类号:TP311文献标识码:A文章编号:1009-3044(2012)01-0003-02

SQL Server Triggers and Constraints in the Application of Comparison

GAO Shui-juan

Abstract: SQL Server provides two main mechanisms to enforce business rules and data integrity: constraint and trigger. Tie main is used to ensure that the input to the data in the column satisfy certain conditions. Trigger is a special procedure, when the data in the table is updated automatically adjusted in response to insert, update, delete statement.

Key words: constraint; trigger; data integrity

SQL Server提供了两种主要机制来强制执行业务规则和数据完整性:约束和触发器。约束主要被用于强制数据的完整性,约束也能提供比触发器更好的性能。然而,在所能完成的操作,以及完成工作时所能使用约束是有限制的。触发器则常被用于验证业务规则,或是更复杂的数据验证,然后可以对数据库的其他地方的数据完成更深入的更新。约束只能对其所在表中的数据,或是在设计时输入的特定数据进行验证。这同触发器形成对比,触发器可以跨越数据库甚至服务器,可以对任何在设计时设置的数据,或从任何表上的其他行为所收集的数据进行检查。如果所需要的访问权限被给予所有包含的对象,就可以使用触发器的这些功能。

有时候当触发器要进行的是一项非常简单的验证任务时,在构建约束和触发器之间区别就很细微。在这种情况下,如果要处理的是有关数据完整性的内容,则使用约束,这比使用触发器可以提供更好的性能。如果该对象是针对业务规则而被构建,并且可能需要复杂的验证,需要处理多个数据库或服务器,或是要相关的错误处理,那么就应该构建触发器。例如,如果需要针对一个表上的操作(更新,删除等)结果,对另一个数据库中的表进行更改,则必须使用触发器。如果从生产数据库中,对另外的数据库保持审核捕获,就会遇到这种情况。如果要做的事情很简单,如对数据域进行验证,看看其中所包含的值是否在一个指定的范围内,这时使用约束就足够了。

约束本质上是SQL Server放置在列上的一种检查,用以确保输入到列中的数据满足特定的条件。这样可以防止输入错误的数据,从而避免数据不一致。如为学生信息表student中的性别字段sex添加检查约束,要求性别字段的值只能是男或女。程序如下:

--假定数据库sdb、学生信息表student已建立

use studb

go

alter table student

add constraint ck_sex check (sex=男or sex=女)

go

若在性别字段插入其他的值,即会发出警告,如图1所示。

触发器的应用以学生成绩管理系统为例,现假定该系统的数据设计需要两张表:学生信息表(student)存放学生的基本信息,学生成绩表(score)存放学生的成绩信息。现在所要求的功能为:当向学生成绩表中插入一条记录的时候,新记录的学生信息必须存放在学生信息表中。程序如下:

--假定数据库sdb已建立

use sdb

go

--创建学生信息表student

create table student

(sno char(8) not null, sname char(8) not null, sex char(2),birthday datetime, class char(5))

go

--创建学生成绩表score

create table score

(sno char(8) not null, sname char(8) not null, cname char(20) not null, score int not null)

go

--创建insert触发器trig_score

create trig_score on score for insert

as

declare @sno char(8), @sname char(8)

select @sno=sno,@sname=sname from inserted

insert into student(sno,sname) values(@sno,@sname)

go

--插入测试数据

use sdb

go

insert into score values(‘104051,王丽,计算机英语,98)

go

--查看两张表

select * from student

select * from score

如图2所示。

由此可以看出,触发器是在对表进行插入、更新或删除操作时自动执行的存储过程。当在某一个表格中插入记录、修改记录或者删除记录时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。在SQL Server中,将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果这次事务未获成功,SQL Server会自动返回该事务执行前的状态。和CHECK约束相比,触发器可以强制实现更加复杂的数据完整性,而且可以引用其他表中的字段。

参考文献:

[1]徐晓丽.巧妙应用SQL Server触发器[J].微型电脑应用,2010(4).

[2]张月.SQL Server中存储过程与触发器技术的研究与应用[J].科技创新导报,2008(23).

[3]张淑梅.SQL Server2005开发与管理[M].大连:大连理工大学出版社,2009.

[4]喻梅,汪洋.SQL Server2005基础教程[M].北京:清华大学出版社,2007.

猜你喜欢
触发器约束
约束离散KP方程族的完全Virasoro对称
RN中Schrödinger-Poisson方程约束极小元的存在性
基于低频软约束的叠前AVA稀疏层反演
主从JK触发器逻辑功能分析
电子世界(2017年22期)2017-12-02 03:03:45
使用触发器,强化安全性
自我约束是一种境界
公民与法治(2016年8期)2016-05-17 04:11:40
适当放手能让孩子更好地自我约束
人生十六七(2015年6期)2015-02-28 13:08:38
几种常见触发器工作方式的讨论
科技传播(2012年12期)2012-07-05 06:06:22
不等式约束下AXA*=B的Hermite最小二乘解
对触发器逻辑功能转换的分析