<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级毛片免费看| 亚洲?v无码国产在丝袜线观看 | 日本最新免费不卡二区在线| 亚洲国产av玩弄放荡人妇 | 亚洲AV无码不卡无码| 免费在线中文日本| 亚洲精品第五页中文字幕| 国内精品免费麻豆网站91麻豆| 亚洲免费在线视频观看| 成人毛片18女人毛片免费视频未| 亚洲AV色无码乱码在线观看| 亚洲国产精品毛片av不卡在线| 中文字幕乱理片免费完整的| 18亚洲男同志videos网站| 国内精品乱码卡1卡2卡3免费| 亚洲精品久久无码av片俺去也| 免费国产在线观看| 热久久这里是精品6免费观看| 久久久久亚洲AV无码观看| 青春禁区视频在线观看直播免费| 美女羞羞喷液视频免费| 亚洲精品国产精品乱码不99| 91视频免费网址| 成人精品国产亚洲欧洲| 国产亚洲成av人片在线观看| 222www免费视频| 精品亚洲成A人在线观看青青| 国产亚洲精久久久久久无码| 久久不见久久见中文字幕免费| 免费看黄福利app导航看一下黄色录像| 国产亚洲色视频在线| 美女被cao免费看在线看网站| 日韩免费码中文在线观看| 亚洲成a人片在线观| 亚洲午夜福利精品无码| 国产成人精品免费视|