?

使用SQL Server觸發器實現數據表的級聯更新

2016-03-10 12:28王鵬宇
科技視界 2016年25期
關鍵詞:觸發器數據表級聯

王鵬宇

(鶴壁職業技術學院,河南 鶴壁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—),漢族,河南淇縣人,華中科技大學計算機技術碩士,鶴壁職業技術學院,講師,研究方向為軟件設計、數據庫技術。

猜你喜歡
觸發器數據表級聯
基于列控工程數據表建立線路拓撲關系的研究
主從JK觸發器邏輯功能分析
使用觸發器,強化安全性
級聯LDPC碼的STBC-OFDM系統
基于級聯MUSIC的面陣中的二維DOA估計算法
圖表
LCL濾波器在6kV級聯STATCOM中的應用
H橋級聯型STATCOM的控制策略研究
基于VSL的動態數據表應用研究
對觸發器邏輯功能轉換的分析
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合