【機房收費系統】之觸發器的使用,機房收費系統觸發器

來源:互聯網
上載者:User

【機房收費系統】之觸發器的使用,機房收費系統觸發器

    機房重構中,有很多功能的實現涉及到對資料庫中多張表進行操作。比方說結賬,結賬成功之後實現的功能有:1、修改卡表的結賬狀態。2、修改充值表的結賬狀態。3、修改退卡表的結賬狀態。4、刪除卡表中不使用並且已結賬的卡的資訊。實現這些功能並不難,只要在D層中重新定義這些方法就OK了,但是這樣的效率並不高。有沒有一種既能實現這些功能又很高效的方法呢?這就涉及到對資料庫中觸發器的使用了。

    觸發器

  一﹕ 觸發器是一種特殊的預存程序,它不能被顯式地調用,而是在往表中插入記錄、更新記錄或者刪除記錄時被自動地啟用。所以觸發器可以用來實現對錶實施複雜的完整性條件約束。


  二﹕ SQL Server為每個觸發器都建立了兩個專用表﹕Inserted表和Deleted表。這兩個表由系統來維護﹐它們存在於記憶體中而不是在資料庫中。這兩個表的結構總是與被該觸發器作用的表的結構相同。觸發器執行 完成後﹐與該觸發器相關的這兩個表也被刪除。 Deleted表存放由於執行Delete或Update語句而要從表中刪除的所有行。Inserted表存放由於執行Insert或Update語句而要向表中插入的所有行。


  三﹕常見的觸發器有兩種:after(for)、instead of,用於insert、update、delete事件。after(for) 表示執行代碼後,執行觸發器;instead of 表示執行代碼前,用已經寫好的觸發器代替你的操作。

    四:文法   

  create trigger 觸發器的名字   on 動作表  for|after         instead of  update|insert|delete  as  SQL語句
        下面是針對結賬的功能自己寫的一個觸發器,它不僅能協助我實現功能,也能避免在D層中寫過多的代碼!
    應用:

CREATE TRIGGER triggerc_UpdateBon Card_info  after update as if update ([ICheck]) update ReturnCard_info set ICheck='已結賬'where ICheck='未結賬' and UserID=(select top 1  UserID from  INSERTED ) update Recharge_info set ICheck='已結賬'where ICheck='未結賬' and UserID=(select top 1  UserID from  INSERTED ) delete from Card_info where ICheck='已結賬' and UState='不使用'
   總結:

  之前學習資料庫的時候,瞭解了觸發器。當時沒有去應用這個知識,重構中用到了才發現它的功能是如此之強大。果然,實踐出真知。




相關文章

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.