<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        機房收費系統之觸發器

        來源:懂視網 責編:小采 時間:2020-11-09 14:54:24
        文檔

        機房收費系統之觸發器

        機房收費系統之觸發器:印象里邊最早接觸觸發器是在耿建玲的視頻里邊見到的,但是完全不理解,但是在實現機房收費系統的時候,就發現原來SQL Server中還有這么一個強大的功能,簡直是和存儲過程合稱為最佳兄弟二人組。 首先我們看看觸發器是什么? 觸發器,因為我先認識的存儲過程+
        推薦度:
        導讀機房收費系統之觸發器:印象里邊最早接觸觸發器是在耿建玲的視頻里邊見到的,但是完全不理解,但是在實現機房收費系統的時候,就發現原來SQL Server中還有這么一個強大的功能,簡直是和存儲過程合稱為最佳兄弟二人組。 首先我們看看觸發器是什么? 觸發器,因為我先認識的存儲過程+

        印象里邊最早接觸觸發器是在耿建玲的視頻里邊見到的,但是完全不理解,但是在實現機房收費系統的時候,就發現原來SQL Server中還有這么一個強大的功能,簡直是和存儲過程合稱為最佳兄弟二人組。 首先我們看看觸發器是什么? 觸發器,因為我先認識的存儲過程+

        印象里邊最早接觸觸發器是在耿建玲的視頻里邊見到的,但是完全不理解,但是在實現機房收費系統的時候,就發現原來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]	--創建觸發器
        	
        ON [dbo].[T_Recharge]	--在T_ReCharge表
        
        for insert	為了插入數據而需要執行的操作
        
        AS 
        --定義一些參數
        declare @cardID char(10)	--卡號
        declare @cash decimal(10, 2)	--卡內余額
        declare @addmoney decimal(10, 2)	--充值金額
        if UPDATE(cash)
        
        BEGIN
        	select @cardID =CardID from inserted 	--選擇充值表中的卡號	
        	select @addmoney=cash from inserted --選擇我們充值表中的充值金額
        	select @cash =T_card.cash from T_Card 	--選擇卡內的余額
        	update T_Card set Cash=@cash+@addmoney where cardID =@cardID 
        END
        
        這里我們大家解釋一下,這個流程是怎么回事,首先我們要執行的語句就是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 自己把邏輯問題給結局了,從而省的我們再寫兩只三條語句去組合,用一次還好,那么用多次呢? 但是觸發器也不是越多越好,因為他是體現在數據庫中的一段代碼,不會呈現在程序中,所以這在開發的階段加幾個也許不是問題,可是如果要是以后咱們的系統出現問題了,那么要修改這方面就顯得有點難了,觸發器越是多越是會造成邏輯上的困難,所以建議大家用可以,適當的用。 最后為大家獻上創建各種觸發器的一些小Demo Insert觸發器
        create trigger tgr_classes_insert
        	on 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_delete
        on 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表!';
        一個觸發器,一個存儲過程,一個全自動,一個任意調用,都能讓程序運行的更快,占用的資源更少。盡管看上去也很像,功能貌似給我們減少了很多的壓力,但是在寫的時候,或者說是在設計數據庫的時候,我們還是要謹慎的用,否者我們會給軟件以后的運行帶來難以想象的痛苦。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        機房收費系統之觸發器

        機房收費系統之觸發器:印象里邊最早接觸觸發器是在耿建玲的視頻里邊見到的,但是完全不理解,但是在實現機房收費系統的時候,就發現原來SQL Server中還有這么一個強大的功能,簡直是和存儲過程合稱為最佳兄弟二人組。 首先我們看看觸發器是什么? 觸發器,因為我先認識的存儲過程+
        推薦度:
        標簽: 里邊 接觸 最早
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 免费毛片在线看不用播放器| 亚洲国产成人无码AV在线影院| 特级毛片免费播放| 国产成人精品免费视频软件| 在线观看亚洲专区| 亚洲成AⅤ人影院在线观看| 国产成人亚洲精品无码AV大片| 国产在线观看免费不卡| 国产成人综合亚洲| 久久亚洲欧洲国产综合| 免费无码又爽又刺激网站直播 | 妞干网在线免费视频| 亚洲AV色欲色欲WWW| 免费高清在线爱做视频| 女人裸身j部免费视频无遮挡| 精品亚洲视频在线观看| 一区二区三区观看免费中文视频在线播放| 亚洲AV人无码激艳猛片| 四虎成年永久免费网站| 亚洲精品GV天堂无码男同| 亚洲美女在线国产| 久久久久国产精品免费看| 91亚洲视频在线观看| 国产片免费福利片永久| 中文字幕一区二区免费| 亚洲国产日韩在线人成下载| 国产在线不卡免费播放| 免费无码H肉动漫在线观看麻豆| 亚洲精品在线免费看| 日本免费福利视频| 国产成人免费ā片在线观看老同学 | 校园亚洲春色另类小说合集| 亚洲精品无码专区在线在线播放| 最近高清中文字幕免费| 真正全免费视频a毛片| 亚洲av无码av制服另类专区| 麻豆成人精品国产免费| a国产成人免费视频| 亚洲高清一区二区三区电影| 亚洲人成图片小说网站| 在线观看无码的免费网站|