□文/朱小娟
(1.安徽国防科技职业学院 安徽·六安;2.电子科技大学数学科学学院 四川·成都)
随着数据库技术在各个领域的广泛应用,保证数据库完整性和安全性的工作也越来越重要。在SQL Server2005中可以通过约束和触发器保证数据的完整性、一致性和有效性。约束直接设置于数据表中,可以实现一些简单的数据完整性操作,而对于一些复杂的完整性操作使用触发器是最佳的选择,如自定义错误、数据的跟踪等。
触发器是一种特殊的存储过程,其特殊性在于它的执行不需要用户手动调用,而是当在触发表或触发视图上运行某些事件时自动被激活执行。在SQL Server2005中,根据触发事件不同分为DML触发器和DDL触发器两类。
1、DML触发器。DML触发器是在数据库中发生数据操作语言(DML)事件时被自动执行。根据触发器语句执行的时机,DML触发器分为AFTER触发器和INSTEAD OF触发器。AFTER触发器先执行 INSERT、UPDATE或DELETE操作,之后执行触发器语句;INSTEAD OF触发器在 INSERT、UPDATE或DELETE语句运行时使用触发器语句代替。
2、DDL触发器。DDL触发器是SQL Server2005的新增功能,当服务器或数据库中发生数据定义语言(DDL)事件时将自动执行该触发器,一般用于执行数据库中的管理任务。
当DML触发器执行时,会产生两个存储在服务器内存中的特殊表:inserted表和deleted表。执行INSERT事件时产生inserted表,用来保存插入记录的副本;执行DELETE事件时产生deleted表,用来保存删除记录的副本;执行UPDATE事件时两个表都产生,deleted表保存更新前记录的副本,inserted表保存更新后记录的副本。这两张表都是临时表,只有当触发器运行时存在,运行完自动删除。用户可以使用这两张表获取插入和删除的记录信息,但不能对其进行修改。
下面以“高校工资管理系统”为例介绍触发器在保证数据的完整性、自定义错误信息、数据跟踪方面的应用。“高校工资管理系统”中主要包含TblTeacher表和TblSalary表,表结构(在此只列出了表的主要字段)如表1、表2所示。(表 1、表 2)
表1 Tbl Teacher表结构
表2 Tbl sal ary表结构
1、保证数据完整性和一致性
任务:在高校中,教师的岗位工资由职称决定。当教师的职称修改时,该教师的岗位工资应该修改为其职称对应的岗位工资,以保证数据的一致性。
分析:此任务涉及到两个表中的字段,使用约束无法实现。我们可以在TblTeacher表中建立一个更新触发器,当Title(职称)列被更新时,对应职工的BasicSalary(岗位工资)值被一起更新。其中,初级对应的BasicSalary为1000,中级 1200,高级 1400,其他 800。
我们可以在TblTeacher表上创建以下触发器:
2、自定义错误信息
任务:教师的岗位工资字段值要求只能是1000、1200、1400、800。我们可以为 BasicSalary字段添加CHECK约束来强制用户只能输入1000、1200、1400、800。这样,当我们输入的值超出这个范围时,系统就会给出如下提示:
消息547,级别16,状态0,第1行
UPDATE语句与CHECK约束"ck_bs"冲突发生于数据库"TEST",表"dbo.Tblsalary",column'BasicSalary'。
语句已终止。
该提示是系统给出,用户较难理解。现希望能在发生错误时,给出一个用户自定义、交互性好的提示。
分析:我们可以在TblSalary表上创建一个触发器,当表上执行插入和更新语句时检查输入值是否正确,不正确给出自定义的提示。
在TblSalary表上创建以下触发器:
END创建完触发器,再输入正确数据时,就会显示如下提示:
消息 5000,级别 16,状态 10,Tri_Upd_Basic-Salary,第 10 行
你输入的值只能是 1000、1200、1400、800,请重输!
3、数据跟踪
任务:Tblsalary表中数据是很重要的,为了帮助管理员掌握BasicSalary表数据的修改情况,我们希望记录下Tblsalary表中数据的修改情况。现要求当Tblsalary表中数据被被修改时,将修改的用户、修改的时间等信息记录下来保存在TblLogInfo表中。(表3)
表3 Tbl LogInfo表结构图
下面我们以Tblsalary表中OverSalary列修改情况记录为例介绍触发器的创建:
本文以“高校工资管理系统”为例,介绍了触发器在完整性设置、自定义错误、数据跟踪方面的应用,其实触发器的应用还有很多,如数据的级联删除和级联更新等。触发器可以实现一些复杂的完整性约束,但在数据库设计的过程中过多的使用触发器会导致数据库系统维护困难,因此在数据库系统的开发过程中应结合约束、规则、存储过程合理地使用触发器。
[1]黄存东.数据库原理及应用.中国水利水电出版社,2011.
[2]邓友林.SQ L Server 2005中用触发器实现数据库的数据完整性研究.湖南工业职业技术学院学报,2011.11.4.
[3]徐友武.SQ L Server 2005触发器应用研究.计算机与信息.