觸發器設計技巧與執行個體

來源:互聯網
上載者:User
 

關鍵字: 觸發器 執行個體

在資料庫設計中,有兩種方法可設定自動化的資料處理規則,一種是條件約束,一種是觸發器,一般而言,條件約束比觸發器較容易設定及維護,且執行效率較好,但條件約束只能對資料進行簡單的欄位檢核,當涉及到多表操作等複雜操
作時,就要用到觸發器了.

一個資料庫系統中有兩個虛擬表用於儲存在表中記錄改動的資訊,分別是:虛擬表Inserted、虛擬表Deleted

在表記錄新增時 存放新增的記錄 不儲存記錄
修改時 存放用來更新的新記錄 存放更新前的記錄
刪除時 不儲存記錄 存放被刪除的記錄

觸發器的種類及觸發時機

After觸發器:觸發時機在資料已變動完成後,它將對變動資料進行必要的善後與處理,若發現有錯誤,則用交易回復(Rollback Transaction)將此次操作所更動的資料全部回複.

Istead of 觸發器:觸發時機在資料變動前發生,且資料如何變動取決於觸發器.

現在介紹一下建立觸發器的編寫格式:

After類型:
Create Trigger 觸發器名稱
on 表名
after 操作(insert,update)
as
Sql語句

Instead of類型:
Create Trigger 觸發器名稱
on 表名
Instead of 操作(update,delete)
as
Sql語句

執行個體1:

在訂單(表orders)中的訂購數量(列名為num)有變動時,觸發器會先到客戶(表Customer)中取得該使用者的信用等級(列名為Level),然後再到信用額度(Creit)中取出該等級許可的訂購數量上下限,最後比較訂單中的訂購數量是否符合限制。

代碼:
Create Trigger num_check
on orders
after insert,update
as 
if update(num)
begin
       if exists(select a.* from orders a join customer b on a.customerid=b.customerid
       join creit c on b.level=c.level
       where a.num between c.up and c.down)
       begin
         rollback transaction
         exec master..xp_sendmail 'administrator','客戶的訂購數量不符合限制'
       end
end

執行個體2:

有工資管理系統中,當公司對某員工甲的月薪進行調整時,通常會先在表員工中修改薪資列,然後在表員工記錄中修改薪資調整時間與薪資

Create trigger compensation
on 員工
after update
as
if @@rowcount=0 return
if update(薪資)
begin
insert 員工記錄
select 員工遍號,薪資,getdate()
from inserted
end

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.