關聯式資料庫SQL之可程式設計性觸發器

2021-07-13 01:39:51 字數 1789 閱讀 4186

前面關聯式資料庫sql之可程式設計性函式(使用者自定義函式)一文提到關係型資料庫提供了可程式設計性的函式、儲存過程、事務、觸發器及游標,前文已介紹了函式、儲存過程、事務,本文來介紹一下觸發器的使用。(還是以前面的銀行系統為例)

觸發器(trigger)是個特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,比如當對乙個表進行操作( insert,delete, update)時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。 觸發器可以從 dba_triggers ,user_triggers 資料字典中查到。

觸發器分為兩種:after觸發器和instead of觸發器。

說明:

after觸發器主要用於在資料表執行insert,delete, update操作之後,同時操作其他表。

instead of觸發器會替代所要執行的sql語句,也就是說所要執行sql並不會真正執行,真正執行的是觸發器中定義的操作。

after觸發器只針對表操作,instead of觸發器除了操作表還可以作用於檢視,擴充套件檢視可以支援的更新操作。

after觸發器是在執行sql之後觸發,而instead of觸發器是在執行sql之前觸發。

乙個表的insert,delete, update操作可以有多個after觸發器,有至多乙個instead of觸發器

觸發器有兩個特殊的表:插入表(instered表)和刪除表(deleted表)

1.after觸發器示例

在取錢時,交易資訊表裡面插入交易資訊,同時要更改賬戶表裡面的餘額

--建立觸發器

create

trigger trigger_getmoney

on transinfo

after

insert

asdeclare @cardid varchar(19)

declare @tranmoney money

select @cardid = cardid , @tranmoney = transmoney from instered;

update cardinfo set leftmoney = leftmoney - @tranmoney where cardid = @cardid

go--執行插入操作

insert

into transinfo values('1324 3626 7532 1935','取款',500,default);

2.instead of觸發器

指定的賬戶"422322001550135015"不可以刪除

--建立觸發器

create

trigger trigger_deleteaccount

on accountinfo

instead

ofdelete

asdelete

from accountinfo where cardid != '422322001550135015'

and cardid=(select cardid from deleted)

--執行刪除操作

資料庫 SQL建立關聯式資料庫

sql語句不區分大小寫 指令show databases 檢視當前資料庫伺服器下有什麼資料庫介面 指令use 庫名 切換當前資料庫 show tables 檢視當前資料庫下有哪些表 介面 當前庫支援的所有字符集 select from character sets 當前庫的預設字符集 show va...

可程式設計計算元件 Apace實時資料庫產品

可程式設計計算元件面向的客戶要求比較高,但其主要目的是提供給軟體製造企業在為客戶提供解決方案時可通過動態程式設計的方式來耦合其業務邏輯。有些應用系統中有部分業務資料需要通過現場實時資料進行相應的演算法產生,這時程式設計計算元件可幫助您的應用系統和業務解耦,可程式設計計算元件適合 電力行業 sis系統...

資料庫之關係資料理論

常用正規化 關聯式資料庫知道了,再來理解正規化。正規化是關聯式資料庫關係模式規範化的標準,從規範化的寬鬆到嚴格,分為不同的正規化,通常使用的有第一正規化。第二正規化 第三正規化及bc正規化。正規化是建立在函式依賴基礎上的。函式依賴 如果乙個表中某乙個欄位y的值是由另外乙個欄位或一組欄位x的值來確定的...