使用SQL Server触发器实现数据表的级联更新
2016-03-10王鹏宇
王鹏宇
(鹤壁职业技术学院,河南 鹤壁458030)
使用SQL Server触发器实现数据表的级联更新
王鹏宇
(鹤壁职业技术学院,河南 鹤壁458030)
数据库的数据完整性是数据库正常运行的重要保证,而触发器是保证数据完整性的重要方式。本文讲述了DML触发器的分类及工作原理,并通过具体实例详细讨论了如何使用触发器来实现数据库的级联更新,从而更好的保证数据库数据完整性。
触发器;数据完整性;级联更新
0 引言
数据库完整性就是保证数据库中数据的正确性和一致性。其中正确性指数据要符合语义规范,数据定义在规范的有效范围内;一致性是指数据库中所表示的同一事物的数据应当一致。在SQL Server中数据库完整性主要有约束来定义,约束定义了必须遵循的用于维护数据一致性和正确性的有效性规则。简单的完整性要求可以在定义基本表时通过创建约束来实现,但如果想要实现更为复杂的数据完整性要求,比如依据数据表的变化实现数据的自动级联更新等,这就需要用触发器来完成了。本文浅析了在SQL Server中通过触发器实现数据库完整性的原理,并结合一个实例分析了使用触发器实现级联更新的一般过程。
1 触发器概述及其工作原理
触发器是SQL Server数据库的重要工具,可以被看作是一种特殊的存储过程。一般的存储过程通过存储过程名称被调用执行,而触发器是通过数据库事件的触发而被执行,在对触发器所监控的表执行添加、修改或删除操作时触发器被触发。触发器的过程体中可以包含复杂的SQL语句,因此触发器可以实现比约束更加复杂的数据完整性要求。
在 SQL Server 2005中有两种触发器:DDL触发器和 DML触发器。DDL触发器是被数据定义语句(DDL)所触发而被调用的触发器; DML触发器是被数据操作语句(DML)所触发而被调用的触发器。数据完整性规则主要由DML触发器创建,因此本文主要讨论DML触发器。由于触发器被激活后所执行的操作不同,SQL Server中包含两种触发方式:After触发方式和Instead Of触发方式。After触发方式是比较常用的触发方式(另有一种For触发方式与After相同,是为与 SQL Server早期版本兼容的可选项),这种触发方式的触发器在进行数据操作以后被触发,先执行了触发语句(插入、更新、删除),然后执行了触发器。INSTEAD OF触发方式在数据发生变化之前被触发,停止触发语句(插入、更新、删除)的执行,直接执行触发器定义的内容。
本文将以After触发器为例来讲述使用触发器实现数据库级联更新。其创建语法格式如下:
CREATE TRIGGER trigger_name
ON table_name
AFTER{[INSERT][,][UPDATE][,][DELETE]}
AS
Sql_statements
在实际应用中,SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表,当触发器被执行时产生。这是两个逻辑表,存放于内存中,表的结构与被触发器作用的表的结构相同且由系统自动创建和撤销。
当执行Insert语句时,Inserted表中保存要向表中插入的所有行。
当执行Delete语句时,Deleted表中保存要从表中删除的所有行。
当执行Update语句时,相当于先执行一个Delete操作,再执行一个Insert操作。
2 触发器应用案例
下面我们以淘宝某网店数据表为例讨论一下使用触发器实现数据表的级联更新。
我们知道在商品购物页面点击立即购买后,虽然我们还没有付钱但是这就表示我们和商家之间已经生成了一个订单。那么其他人再打开此商品的购买页面时,页面上显示的库存数量就应该更新为新的库存数量了。其实这个过程就是通过触发器更新数据表来实现的。
在淘宝网站的后台,买家购买了某商品后就会生成一个新的订单,也就是说在订单表中会插入一条新的记录来表示这个新订单,其中就包含了订单编号、商品编号、商品价格、购买数量等信息。同时在库存表中被购买商品的库存数量也应该被更新为原来的库存数量减去购买数量从而生成新的库存数量。这个过程的实现就被称为数据表的级联更新,所谓级联更新也叫联动更新,指当我们修改了一个数据表中的某些数据,系统会自动去修改另一个数据表相应数据。
首先我们先要在订单表上建立一个insert触发器用于响应对订单表的插入操作。当我们点击立即购买后,系统会生成一个新的订单,然后把新订单的数据插入到订单表中,同时也会触发insert触发器这样订单数据也会同步插入到inserted表中,然后会执行这个触发器。那么我们就可以在这个触发器中定义一个更新操作,去同步更新库存表,让库存量跟新为新的库存量。
create trigger t1
on订单表
for insert
as
update库存表
set库存数量=库存数量- (select购买数量from inserted)
where商品编号=(select商品编号 from inserted)
可以看到经过这个触发器的执行,用户在下订单的同时商品的库存数量也被相应的修改为新的库存数量。
3 结束语
在数据库的应用中,触发器起到了非常重要的作用。它是保证数据完整性的重要补充工具,它可以很容易的实现表间操作所引发的数据的级联更新从而能够更好的保证数据的完整性,帮助用户实现满足企业需求的规则,使得数据库系统更加方便、高效和安全。
这篇文章结合具体的实例讨论了DML触发器的工作原理和实现数据表级联更新的方法。结果表明应用触发器不仅可以处理表与表之间复杂的逻辑关系,优化数据库的设计,更好地维护数据库中数据的完整性;同时还可以实现由于数据修改而引发的相关数据的自动级联更新操作,从而更安全高效的完成数据更新,避免了人工操作带来的安全隐患,提高了整体数据库系统的安全性能。
[1]王珊,萨师煊.数据库系统概论(第4版)[M].北京:高等教育出版社,2006.
[2]罗运模,王珊.SQL Server数据库系统基础[M].北京:高等教育出版社,2003.
[3]张益星.SQL Server 2000触发器技术及应用[J].信息技术,2005(10):69-70.
[4]徐国华,白凤娥.数据库中的触发器技术[J].太原大学学报,2006(3):64-65.
[5]符策锐.触发器保持评教系统数据完整性的应用研究[J].微计算机信息,2012,28 (8):173-174,24.
[责任编辑:朱丽娜]
王鹏宇(1978—),汉族,河南淇县人,华中科技大学计算机技术硕士,鹤壁职业技术学院,讲师,研究方向为软件设计、数据库技术。