国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
當前位置: 首頁 - 科技 - 知識百科 - 正文

機房收費系統(tǒng)之觸發(fā)器

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

機房收費系統(tǒng)之觸發(fā)器

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

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

印象里邊最早接觸觸發(fā)器是在耿建玲的視頻里邊見到的,但是完全不理解,但是在實現(xiàn)機房收費系統(tǒng)的時候,就發(fā)現(xiàn)原來SQL Server中還有這么一個強大的功能,簡直是和存儲過程合稱為最佳兄弟二人組。

首先我們看看觸發(fā)器是什么?

觸發(fā)器,因為我先認識的存儲過程+事務,所以我在這里把他稱為存儲過程的小兄弟,至于為什么,因為他們真的很像,對于存儲過程,大家可以在http://blog.csdn.net/lovemenghaibin/article/details/38235817了解,這里就不詳細的介紹了,但是觸發(fā)器是什么呢?

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

觸發(fā)器可以查詢其他表,而且可以包含復雜的SQL語句。它們主要用于強制服從復雜的業(yè)務規(guī)則或要求。例如:您可以根據(jù)客戶當前的帳戶狀態(tài),控制是否允許插入新訂單。 比如說,我這里有兩張表,一張是充值表(Recharge_Info),一張是學生表(Student_Info),如果我們要進行充值行為,也就是要進行兩個動作,第一為學生表的錢加上充值的錢,第二就是為充值表里邊添加一條記錄,那么如果要完成這個操作,我們需要兩步,更新和插入信息,也就說我們會這樣 insert Recharge_Info into (cardID,addMoney...) values(@cardID,addMoney...) Update Student_Info set Cash=Cash+addMoney where cardID=@cardID
這個過程如果需要執(zhí)行多次呢,大家每次都要用兩條語句來組合這一個過程,是不是麻煩了點,于是現(xiàn)在就有了觸發(fā)器這個過程,那么我來為大家來展示一下觸發(fā)器的相同實現(xiàn)。
CREATE TRIGGER [dbo].[TR_charge_U]	--創(chuàng)建觸發(fā)器
	
ON [dbo].[T_Recharge]	--在T_ReCharge表

for insert	為了插入數(shù)據(jù)而需要執(zhí)行的操作

AS 
--定義一些參數(shù)
declare @cardID char(10)	--卡號
declare @cash decimal(10, 2)	--卡內(nèi)余額
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 	--選擇卡內(nèi)的余額
	update T_Card set Cash=@cash+@addmoney where cardID =@cardID 
END
這里我們大家解釋一下,這個流程是怎么回事,首先我們要執(zhí)行的語句就是insert Recharge_Info into (cardID,addMoney...) values(@cardID,addMoney...),那么觸發(fā)器當你在插入數(shù)據(jù)的時候,就會將信息保存到Inserted中,然后我們再根據(jù)需要把里邊的數(shù)據(jù)取出來,用來更新我們需要更新的表。 在觸發(fā)器中,我們有兩張表,一張是deleted表,一張Inserted表,這兩張是虛擬表,用用完之后數(shù)據(jù)庫會自動刪除。 下面我用表格的形式將他們的用處展現(xiàn)出來

對表的操作

Inserted邏輯表

Deleted邏輯表

增加記錄(insert)

存放增加的記錄

刪除記錄(delete)

存放被刪除的記錄

修改記錄(update)

存放更新后的記錄

存放更新前的記錄

所以我們在執(zhí)行操作的時候,人們會說觸發(fā)器是同時操作的,其實不是的,觸發(fā)器把我們前邊說的insert Recharge_Info into (cardID,addMoney...) values(@cardID,addMoney...,Update Student_Info set Cash=Cash+addMoney where cardID=@cardID 自己把邏輯問題給結局了,從而省的我們再寫兩只三條語句去組合,用一次還好,那么用多次呢? 但是觸發(fā)器也不是越多越好,因為他是體現(xiàn)在數(shù)據(jù)庫中的一段代碼,不會呈現(xiàn)在程序中,所以這在開發(fā)的階段加幾個也許不是問題,可是如果要是以后咱們的系統(tǒng)出現(xiàn)問題了,那么要修改這方面就顯得有點難了,觸發(fā)器越是多越是會造成邏輯上的困難,所以建議大家用可以,適當?shù)挠谩?最后為大家獻上創(chuàng)建各種觸發(fā)器的一些小Demo Insert觸發(fā)器
create trigger tgr_classes_insert
	on classes
 	for insert --插入觸發(fā)
	as
 --定義變量
 declare @id int, @name varchar(20), @temp int;
 --在inserted表中查詢已經(jīng)插入記錄信息
 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觸發(fā)器
create trigger tgr_classes_delete
on classes
 for delete --刪除觸發(fā)
as
 print '備份數(shù)據(jù)中……'; 
 if (object_id('classesBackup', 'U') is not null)
 --存在classesBackup,直接插入數(shù)據(jù)
 insert into classesBackup select name, createDate from deleted;
 else
 --不存在classesBackup創(chuàng)建再插入
 select * into classesBackup from deleted;
 print '備份數(shù)據(jù)成功!';
update觸發(fā)器
create trigger tgr_classes_update
 on classes
 for update
 as
 declare @oldName varchar(20), @newName varchar(20);
 --更新前的數(shù)據(jù)
 select @oldName = name from deleted;
 if (exists (select * from student where name like '%'+ @oldName + '%'))
 begin
 --更新后的數(shù)據(jù)
 select @newName = name from inserted;
 update student set name = replace(name, @oldName, @newName) where name like '%'+ @oldName + '%';
 print '級聯(lián)修改數(shù)據(jù)成功!';
 end
 else
 print '無需修改student表!';
一個觸發(fā)器,一個存儲過程,一個全自動,一個任意調(diào)用,都能讓程序運行的更快,占用的資源更少。盡管看上去也很像,功能貌似給我們減少了很多的壓力,但是在寫的時候,或者說是在設計數(shù)據(jù)庫的時候,我們還是要謹慎的用,否者我們會給軟件以后的運行帶來難以想象的痛苦。

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

文檔

機房收費系統(tǒng)之觸發(fā)器

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美中文日韩 | 全黄网站 | 青青伊人91久久福利精品 | 日本一区二区三区免费在线观看 | 国产毛片一级 | 97人人插| 国产精品综合一区二区 | 日韩欧美一区二区三区在线视频 | 日韩国产电影 | 午夜精品一区二区三区在线观看 | 中文字幕一区二区三区久久网站 | 热久久国产欧美一区二区精品 | 日韩欧美国产电影 | 国产欧美综合在线观看第七页 | 精品一区二区三区四区五区 | 欧美高清a | 久久亚洲不卡一区二区 | 欧美在线 | 亚洲 | 亚洲欧美日韩第一页 | 欧美日韩操 | xxx色| 亚洲 欧美 中文字幕 | 日韩国产在线播放 | 亚洲欧美综合图片 | 在线播放色| 国产精品观看 | 在线观看黄a大片爽爽影院免费 | 成人区精品一区二区不卡亚洲 | 亚洲va国产日韩欧美精品 | 亚洲国产成人精品久久 | 国产国语一级a毛片高清视频 | 2022国产91精品久久久久久 | 一区 在线播放 | 国产高清精品一级毛片 | 亚洲人成网站999久久久综合 | 伊人逼逼| 欧美日韩成人午夜免费 | 亚洲va乱码一区二区三区 | xx中文字幕乱偷avxx | 久久精品国产99久久99久久久 | 999国产精品999久久久久久 |