作為一名軟件開(kāi)發(fā)人員,應(yīng)全面了解數(shù)據(jù)庫(kù)的運(yùn)用。在數(shù)據(jù)庫(kù)SQL Sever中,有一種存儲(chǔ)過(guò)程是十分重要的,那就是觸發(fā)器。它與普通的存儲(chǔ)過(guò)程有所不同,它是通過(guò)事件進(jìn)行觸發(fā)被自動(dòng)調(diào)用執(zhí)行的。而存儲(chǔ)過(guò)程可以通過(guò)存儲(chǔ)過(guò)程的名稱(chēng)被調(diào)用。下面小編就給大家介紹觸發(fā)器基本語(yǔ)法與作用。
首先,我們要了解什么是觸發(fā)器?
觸發(fā)器是在對(duì)表進(jìn)行插入、更新或刪除操作時(shí)自動(dòng)執(zhí)行的存儲(chǔ)過(guò)程。 觸發(fā)器對(duì)表進(jìn)行插入、更新、刪除的時(shí)候會(huì)自動(dòng)執(zhí)行的特殊存儲(chǔ)過(guò)程。觸發(fā)器一般用在check約束更加復(fù)雜的約束上面。觸發(fā)器和普通的存儲(chǔ)過(guò)程的區(qū)別是:觸發(fā)器是當(dāng)對(duì)某一個(gè)表進(jìn)行操作。諸如:update、insert、delete這些操作的時(shí)候,系統(tǒng)會(huì)自動(dòng)調(diào)用執(zhí)行該表上對(duì)應(yīng)的觸發(fā)器。SQL Server 2005中觸發(fā)器可以分為兩類(lèi):DML觸發(fā)器和DDL觸發(fā)器,其中DDL觸發(fā)器它們會(huì)影響多種數(shù)據(jù)定義語(yǔ)言語(yǔ)句而激發(fā),這些語(yǔ)句有create、alter、drop語(yǔ)句。
SQL Server為每個(gè)觸發(fā)器都創(chuàng)建了兩個(gè)專(zhuān)用表﹕Inserted表和Deleted表。
觸發(fā)器通常用于強(qiáng)制業(yè)務(wù)規(guī)則。它是一種高級(jí)約束,可以定義比用CHECK 約束更為復(fù)雜的約束:
(1)可執(zhí)行復(fù)雜的SQL語(yǔ)句(if/while/case);
(2)可引用其它表中的列;
(3)觸發(fā)器定義在特定的表上,與表相關(guān)。
(4)自動(dòng)觸發(fā)執(zhí)行;
(5)不能直接調(diào)用;
(6)是一個(gè)事務(wù)(可回滾);
使用觸發(fā)器的好處
觸發(fā)器可通過(guò)數(shù)據(jù)庫(kù)中的相關(guān)表實(shí)現(xiàn)級(jí)聯(lián)更改,不過(guò),通過(guò)級(jí)聯(lián)引用完整性約束可以更有效地執(zhí)行這些更改。
觸發(fā)器可以強(qiáng)制比用CHECK約束定義的約束更為復(fù)雜的約束。與 CHECK 約束不同,觸發(fā)器可以引用其它表中的列。例如,觸發(fā)器可以使用另一個(gè)表中的 SELECT 比較插入或更新的數(shù)據(jù),以及執(zhí)行其它操作,如修改數(shù)據(jù)或顯示用戶(hù)定義錯(cuò)誤信息。觸發(fā)器也可以評(píng)估數(shù)據(jù)修改前后的表狀態(tài),并根據(jù)其差異采取對(duì)策。
一個(gè)表中的多個(gè)同類(lèi)觸發(fā)器(INSERT、UPDATE 或 DELETE)允許采取多個(gè)不同的對(duì)策以響應(yīng)同一個(gè)修改語(yǔ)句。
觸發(fā)器的類(lèi)型
DELETE 觸發(fā)器
INSERT 觸發(fā)器
UPDATE 觸發(fā)器
觸發(fā)器有兩個(gè)特殊的表:插入表(instered表)和刪除表(deleted表)。這兩張是邏輯表也是虛表。有系統(tǒng)在內(nèi)存中創(chuàng)建者兩張表,不會(huì)存儲(chǔ)在數(shù)據(jù)庫(kù)中。而且兩張表的都是只讀的,只能讀取數(shù)據(jù)而不能修改數(shù)據(jù)。這兩張表的結(jié)果總是與被改觸發(fā)器應(yīng)用的表的結(jié)構(gòu)相同。當(dāng)觸發(fā)器完成工作后,這兩張表就會(huì)被刪除。Inserted表的數(shù)據(jù)是插入或是修改后的數(shù)據(jù),而deleted表的數(shù)據(jù)是更新前的或是刪除的數(shù)據(jù)。
對(duì)表的操作 | Inserted邏輯表 | Deleted邏輯表 |
增加記錄(insert) | 存放增加的記錄 | 無(wú) |
刪除記錄(delete) | 無(wú) | 存放被刪除的記錄 |
修改記錄(update) | 存放更新后的記錄 | 存放更新前的記錄 |
Update數(shù)據(jù)的時(shí)候就是先刪除表記錄,然后增加一條記錄。這樣在inserted和deleted表就都有update后的數(shù)據(jù)記錄了。注意的是:觸發(fā)器本身就是一個(gè)事務(wù),所以在觸發(fā)器里面可以對(duì)修改數(shù)據(jù)進(jìn)行一些特殊的檢查。如果不滿(mǎn)足可以利用事務(wù)回滾,撤銷(xiāo)操作。
數(shù)據(jù)庫(kù)SQLSever觸發(fā)器語(yǔ)法
以上內(nèi)容是關(guān)于數(shù)據(jù)庫(kù)SQLSever觸發(fā)器的介紹,唯學(xué)網(wǎng)小編提醒,關(guān)于數(shù)據(jù)庫(kù)資訊、學(xué)習(xí)指導(dǎo)等相關(guān)內(nèi)容的請(qǐng)繼續(xù)關(guān)注唯學(xué)網(wǎng)。小編會(huì)第一時(shí)間為大家更新跟進(jìn)最新信息,如有任何疑問(wèn)也可在線留言,小編會(huì)為您在第一時(shí)間解答!
|
|
||
|
|