機房收費系統之觸發器,收費系統觸發器

來源:互聯網
上載者:User

機房收費系統之觸發器,收費系統觸發器

印象裡邊最早接觸觸發器是在耿建玲的視頻裡邊見到的,但是完全不理解,但是在實現機房收費系統的時候,就發現原來SQL Server中還有這麼一個強大的功能,簡直是和預存程序合稱為最佳兄弟二人組。

首先我們看看觸發器是什嗎?

觸發器,因為我先認識的預存程序+事務,所以我在這裡把他稱為預存程序的小兄弟,至於為什麼,因為他們真的很像,對於預存程序,大家可以在http://blog.csdn.net/lovemenghaibin/article/details/38235817瞭解,這裡就不詳細的介紹了,但是觸發器是什麼呢?

    觸發器是SQL Server提供給程式員和資料分析員來保證資料完整性的一種方式,它就是與表事件相關的特殊預存程序。觸發器不能被直接執行,只能為表上的Insert\Update\Delete事件所觸發。它也不能傳遞或接受參數。

觸發器可以查詢其他表,而且可以包含複雜的SQL語句。它們主要用於強制服從複雜的商務規則或要求。例如:您可以根據客戶當前的帳戶狀態,控制是否允許插入新訂單。比如說,我這裡有兩張表,一張是充值表(Recharge_Info),一張是學生表(Student_Info),如果我們要進行充值行為,也就是要進行兩個動作,第一為學生表的錢加上充值的錢,第二就是為充值表裡邊添加一條記錄,那麼如果要完成這個操作,我們需要兩步,更新和插入資訊,也就說我們會這樣insert Recharge_Info into (cardID,addMoney...) values(@cardID,addMoney...)Update Student_Info set Cash=Cash+addMoney where cardID=@cardID 
這個過程如果需要執行多次呢,大家每次都要用兩條語句來組合這一個過程,是不是麻煩了點,於是現在就有了觸發器這個過程,那麼我來為大家來展示一下觸發器的相同實現。
CREATE TRIGGER [dbo].[TR_charge_U]<span style="white-space:pre"></span>--建立觸發器<span style="white-space:pre"></span>ON [dbo].[T_Recharge]<span style="white-space:pre"></span>--在T_ReCharge表for insert<span style="white-space:pre"></span>為了插入資料而需要執行的操作AS --定義一些參數declare @cardID char(10)<span style="white-space:pre"></span>--卡號declare @cash decimal(10, 2)<span style="white-space:pre"></span>--卡內餘額declare @addmoney decimal(10, 2)<span style="white-space:pre"></span>--儲值金額if UPDATE(cash)BEGINselect @cardID =CardID  from inserted <span style="white-space:pre"></span>--選擇儲值表中的卡號select @addmoney=cash  from inserted --選擇我們儲值表中的儲值金額select @cash =T_card.cash  from T_Card <span style="white-space:pre"></span>--選擇卡內的餘額update T_Card  set Cash=@cash+@addmoney  where cardID =@cardID END</span>

這裡我們大家解釋一下,這個流程是怎麼回事,首先我們要執行的語句就是insert Recharge_Info into (cardID,addMoney...) values(@cardID,addMoney...),那麼觸發器當你在插入資料的時候,就會將資訊儲存到Inserted中,然後我們再根據需要把裡邊的資料取出來,用來更新我們需要更新的表。在觸發器中,我們有兩張表,一張是deleted表,一張Inserted表,這兩張是虛擬表,用用完之後資料庫會自動刪除。下面我用表格的形式將他們的用處展現出來

對錶的操作

Inserted邏輯表

Deleted邏輯表

增加記錄(insert)

存放增加的記錄

刪除記錄(delete)

存放被刪除的記錄

修改記錄(update)

存放更新後的記錄

存放更新前的記錄


所以我們在執行操作的時候,人們會說觸發器是同時操作的,其實不是的,觸發器把我們前邊說的insert Recharge_Info into (cardID,addMoney...) values(@cardID,addMoney...,Update Student_Info set Cash=Cash+addMoney where cardID=@cardID 自己把邏輯問題給結局了,從而省的我們再寫兩隻三條語句去組合,用一次還好,那麼用多次呢?但是觸發器也不是越多越好,因為他是體現在資料庫中的一段代碼,不會呈現在程式中,所以這在開發的階段加幾個也許不是問題,可是如果要是以後咱們的系統出現問題了,那麼要修改這方面就顯得有點難了,觸發器越是多越是會造成邏輯上的困難,所以建議大家用可以,適當的用。最後為大家獻上建立各種觸發器的一些小DemoInsert觸發器
create trigger tgr_classes_inserton classes    for insert --插入觸發as    --定義變數    declare @id int, @name varchar(20), @temp int;    --在inserted表中查詢已經插入記錄資訊    select @id = id, @name = name from inserted;    set @name = @name + convert(varchar, @id);    set @temp = @id / 2;        insert into student values(@name, 18 + @id, @temp, @id);
delete觸發器
create trigger tgr_classes_deleteon classes    for delete --刪除觸發as    print '備份資料中……';        if (object_id('classesBackup', 'U') is not null)        --存在classesBackup,直接插入資料        insert into classesBackup select name, createDate from deleted;    else        --不存在classesBackup建立再插入        select * into classesBackup from deleted;    print '備份資料成功!';
update觸發器
create trigger tgr_classes_update    on classes    for update   as    declare @oldName varchar(20), @newName varchar(20);    --更新前的資料    select @oldName = name from deleted;    if (exists (select * from student where name like '%'+ @oldName + '%'))        begin            --更新後的資料            select @newName = name from inserted;            update student set name = replace(name, @oldName, @newName) where name like '%'+ @oldName + '%';            print '級聯修改資料成功!';        end    else        print '無需修改student表!';
一個觸發器,一個預存程序,一個全自動,一個任意調用,都能讓程式啟動並執行更快,佔用的資源更少。儘管看上去也很像,功能貌似給我們減少了很多的壓力,但是在寫的時候,或者說是在設計資料庫的時候,我們還是要謹慎的用,否者我們會給軟體以後的運行帶來難以想象的痛苦。


怎破解機房的收費系統???

你可以看下工作管理員看到有收費系統進程就結束他,就可以免費上網了!
 
C語言的機房收費管理系統

這個是用C實現的,不要介面嗎?
 

相關文章

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.