懷艾芹
(天津機(jī)電職業(yè)技術(shù)學(xué)院,天津市 300131)
觸發(fā)器在保持?jǐn)?shù)據(jù)庫完整性方面的應(yīng)用
懷艾芹
(天津機(jī)電職業(yè)技術(shù)學(xué)院,天津市 300131)
觸發(fā)器是SQL Server數(shù)據(jù)庫管理系統(tǒng)為應(yīng)用程序開發(fā)人員提供的一種保證數(shù)據(jù)庫中數(shù)據(jù)完整性的方法,是一種特殊類型的存儲過程。在對觸發(fā)器的概念,作用,類型進(jìn)行闡述的基礎(chǔ)上,說明使用SQL Server2005 DML觸發(fā)器可以保證實(shí)現(xiàn)check約束、foreign key約束等組件無法實(shí)現(xiàn)的復(fù)雜的數(shù)據(jù)完整性。
數(shù)據(jù)庫;數(shù)據(jù)完整性;觸發(fā)器;SQL Server 2005
觸發(fā)器是一種特殊類型的存儲過程,其特殊主要體現(xiàn)在它在插入、刪除或修改指定表中的數(shù)據(jù)時自動觸發(fā)執(zhí)行觸發(fā)器中定義的T-SQL語句,從而確保對數(shù)據(jù)的處理必須符合這些T-SQL語句所定義的規(guī)則,實(shí)現(xiàn)更為復(fù)雜的數(shù)據(jù)完整性約束。存儲過程創(chuàng)建完后必須通過存儲過程的名字調(diào)用才能執(zhí)行。觸發(fā)器的一般作用如下:
·級聯(lián)修改數(shù)據(jù)庫中相關(guān)的表。
·執(zhí)行比檢查約束更為復(fù)雜的約束操作。
·拒絕或回絕違反引用完整性的操作。檢查對數(shù)據(jù)表的操作是否違反引用完整性,并選擇相應(yīng)的操作。
·比較表修改前后數(shù)據(jù)之間的差別,并根據(jù)差別采取相應(yīng)的操作。
1.觸發(fā)器的種類
SQL Server2005提供了兩種類型的觸發(fā)器:DM L觸發(fā)器和DDL觸發(fā)器。
⑴DML觸發(fā)器。DML觸發(fā)器是在執(zhí)行數(shù)據(jù)操作語言事件時被調(diào)用的觸發(fā)器,其中數(shù)據(jù)操作語言事件包括INSERT、UPDA TE和D ELETE語句。DM L觸發(fā)器分為AFTER和INSTEAD OF兩種:AFTER觸發(fā)僅在觸發(fā)T-SQL語句中指定的所有操作都已成功執(zhí)行時才被激發(fā),而INSTEAD OF觸發(fā)器用于替代引發(fā)觸發(fā)器執(zhí)行的T-SQL語句,被替代的T-SQL語句并不執(zhí)行。
⑵DDL觸發(fā)器。與DML觸發(fā)器類似,DDL觸發(fā)器也是一種特殊的存儲過程,由相應(yīng)的事件觸發(fā)后執(zhí)行。與DM L不同的是,它相應(yīng)的觸發(fā)事件是由數(shù)據(jù)定義語言引起的事件,包括CREA TE、AL TER和DROP語句。DDL觸發(fā)器用于執(zhí)行數(shù)據(jù)庫管理任務(wù),如調(diào)節(jié)和審計數(shù)據(jù)庫運(yùn)轉(zhuǎn)。DDL觸發(fā)器只能在觸發(fā)事件發(fā)生后才會調(diào)用執(zhí)行,即它只能是AFTER類型的。
2.DM L觸發(fā)器工作時所涉及到的兩個特殊表
SQL Server2005為每個DM L觸發(fā)器都創(chuàng)建了兩個專用臨時表:inserted表和deleted表。這兩個表的結(jié)構(gòu)總是與被該觸發(fā)器作用的表的結(jié)構(gòu)相同,觸發(fā)器執(zhí)行完成后,與該觸發(fā)器相關(guān)的兩個表也會被刪除。
Inserted表:用來存儲執(zhí)行過insert或up date語句之后所影響的行內(nèi)容。執(zhí)行insert時,新添加的行會同時附加至觸發(fā)程序表和inserted表。執(zhí)行update時,舊行被復(fù)制到deleted表格,新行被復(fù)制到觸發(fā)程序表及inserted表。
Deleted表:用來存儲因執(zhí)行delete或up date語句而受影響的行內(nèi)容,在執(zhí)行delete或update語句時,從觸發(fā)程序表中被刪除的行發(fā)送到deleted表。
當(dāng)對表中的數(shù)據(jù)進(jìn)行insert、delete、update操作時,inserted和deleted表中保存的數(shù)據(jù)如表1所示。
表1 inserted和deleted表中數(shù)據(jù)
1.使用 T-SQL語句創(chuàng)建DM L觸發(fā)器
創(chuàng)建DML觸發(fā)器可以使用CREA TE TRIGGER語句,其基本的語法格式如下:
2.DM L觸發(fā)器在保持?jǐn)?shù)據(jù)庫完整性方面的實(shí)際應(yīng)用
在一個Stuscore(學(xué)生成績)數(shù)據(jù)庫中有 XSQ K(學(xué)生情況)表,用于存儲學(xué)生的基本信息;XSCJ(學(xué)生成績)表;用于存儲學(xué)生的成績信息;XSKC(學(xué)生課程)表,用于存儲課程信息。三個表的表結(jié)構(gòu)如表2至表4所示(為了減少篇幅,對表結(jié)構(gòu)作了簡化處理)。
表2 XSQ K表結(jié)構(gòu)
表3 XSCJ表結(jié)構(gòu)
表4 XSKC表結(jié)構(gòu)
例1:創(chuàng)建觸發(fā)tr1,實(shí)現(xiàn)如下功能:當(dāng)在xscj表添加一條學(xué)生的成績信息后,自動更新xsqk表中該學(xué)生的總學(xué)分信息。
例2:創(chuàng)建觸發(fā)器tr2,實(shí)現(xiàn)如下功能:當(dāng)刪除xskc表中的某門課程的記錄時,對應(yīng)的xscj表中與此課程有關(guān)的信息均被刪除。
(3)驗(yàn)證
Select 3 f rom xsqk
結(jié)果:提示“不能對xsqk表進(jìn)行刪除操作”,且xsqk表中學(xué)號為“1”的學(xué)生仍存在。
[1]李春葆,趙丙秀,張牧.數(shù)據(jù)庫系統(tǒng)開發(fā)教程[M].北京:清華大學(xué)出版社,2008.
[2]余芳,肖蓉,劉蔚琴.中文SQL Server 2005數(shù)據(jù)庫管理與開發(fā)[M].北京:冶金工業(yè)出版社,2006.
[3]張鑫燕,吳小松.SQL Server 2000程序設(shè)計[M].北京:科學(xué)出版社,2003.
[4]姬曉輝.觸發(fā)器在數(shù)據(jù)庫完整性方面的應(yīng)用[J].洛陽大學(xué)學(xué)報,2006,(04).
[5]程志梅,邱霞明,王曉燕.SQL Server2000數(shù)據(jù)庫中觸發(fā)器的妙用[J].計算機(jī)應(yīng)用與軟件,2009,(03).
A bs tra c t:Trigger is a method that guarantees the integrity of data-base and a special type of stored p rocedure.It is p rovided by SQL Server data-basemanagement system to developers of app lica2 tion p rograms.After an elaboration of the trigger’s concep t,functions and types,the paper declares that the SQL Server 2005 DM L trigger can guarantee the comp licated data integrity.
Ke y w o rd s:data-base;data integrity;trigger;SQL Server 2005
The Role that Trigger Plays in Maintaining the Integrity of Data-base
HUAIAi-qin
(Tianjin Vocational College of M echanics and Electricity,Tianjin 300131 China)
TP392
A
1673-582X(2011)02-0092-04
2010-11-10
懷艾芹(1977-),女,湖北省隨州人,天津機(jī)電職業(yè)技術(shù)學(xué)院講師,從事軟件工程方面的研究。