国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

觸發(fā)器設(shè)計(jì)技巧與實(shí)例

2024-07-21 02:08:48
字體:
供稿:網(wǎng)友

                            觸發(fā)器設(shè)計(jì)技巧與實(shí)例

在數(shù)據(jù)庫設(shè)計(jì)中,有兩種方法可設(shè)定自動(dòng)化的資料處理規(guī)則,一種是條件約束,
一種是觸發(fā)器,一般而言,條件約束比觸發(fā)器較容易設(shè)定及維護(hù),且執(zhí)行效率較
好,但條件約束只能對(duì)資料進(jìn)行簡單的欄位檢核,當(dāng)涉及到多表操作等復(fù)雜操
作時(shí),就要用到觸發(fā)器了.
      一個(gè)數(shù)據(jù)庫系統(tǒng)中有兩個(gè)虛擬表用于存儲(chǔ)在表中記錄改動(dòng)的信息,分別
 是:
                 虛擬表inserted                    虛擬表deleted

在表記錄新增時(shí)   存放新增的記錄                        不存儲(chǔ)記錄
        修改時(shí)   存放用來更新的新記錄                  存放更新前的記錄
        刪除時(shí)   不存儲(chǔ)記錄                            存放被刪除的記錄
 
      觸發(fā)器的種類及觸發(fā)時(shí)機(jī)
 after觸發(fā)器:觸發(fā)時(shí)機(jī)在資料已變動(dòng)完成后,它將對(duì)變動(dòng)資料進(jìn)行必要的
              善后與處理,若發(fā)現(xiàn)有錯(cuò)誤,則用事務(wù)回滾(rollback transaction)
              將此次操作所更動(dòng)的資料全部回復(fù)。
 istead of 觸發(fā)器:觸發(fā)時(shí)機(jī)在資料變動(dòng)前發(fā)生,且資料如何變動(dòng)取決于觸發(fā)器

現(xiàn)在介紹一下創(chuàng)建觸發(fā)器的編寫格式:

after類型:
    create trigger  觸發(fā)器名稱
    on 表名
    after 操作(insert,update)
    as 
      sql語句

instead類型
    create trigger 觸發(fā)器名稱
    on 表名
    instead of 操作(update,delete)
    as
      sql語句

實(shí)例1:
     在訂單(表orders)中的訂購數(shù)量(列名為num)有變動(dòng)時(shí),觸發(fā)器會(huì)先到客戶(表customer)中
取得該用戶的信用等級(jí)(列名為level),然后再到信用額度(creit)中取出該等級(jí)
許可的訂購數(shù)量上下限,最后比較訂單中的訂購數(shù)量是否符合限制。

代碼:         
           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','客戶的訂購數(shù)量不符合限制'
               end  
             end 
實(shí)例2:
      有工資管理系統(tǒng)中,當(dāng)公司對(duì)某員工甲的月薪進(jìn)行調(diào)整時(shí),通常會(huì)先在表員工中修改薪資列,然后在
      表員工記錄中修改薪資調(diào)整時(shí)間與薪資
           
          create trigger compensation
          on 員工
          after update
          as
            if @@rowcount=0 return
            if update(薪資)
               begin
                 insert 員工記錄
                 select 員工遍號(hào),薪資,getdate()
                 from inserted
               end

 

 

           
         
,歡迎訪問網(wǎng)頁設(shè)計(jì)愛好者web開發(fā)。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丽水市| 溧水县| 济源市| 大名县| 全椒县| 杂多县| 松潘县| 苍南县| 成武县| 望谟县| 嘉善县| 乌恰县| 泸州市| 巍山| 泌阳县| 十堰市| 桃源县| 石阡县| 峨眉山市| 阿克苏市| 舟曲县| 民勤县| 黔西县| 临汾市| 金秀| 贵阳市| 方山县| 扶沟县| 大田县| 武隆县| 苏尼特右旗| 江永县| 汉寿县| 井研县| 盐津县| 武隆县| 霍山县| 高平市| 大关县| 长岭县| 容城县|