【機房重構】結賬—觸發器應用
阿新 • • 發佈:2019-01-10
前提
在機房重構結賬功能中,共涉及到四張表的使用,分別是User表,Card表,Recharge表,Cancel表,Bill 賬單表。等我基本上把功能實現的時候,原來還有更優的程式碼,將幾張表的查詢放在儲存過程中使用很便利,回頭看自己的弱爆了。不過,我還是完美實現了觸發器,那我們開始進入正題——觸發器。
學習
- 定義理解:在執行某一特定操作後,觸發某些事件。比如:結賬功能,在Bill賬單表中新增記錄,在Card表,Recharge表,Cancel表中更新Ischeck欄位。
- 優點:保證資料完整性;
使用方法
方法1:
方法2:
本編用的是方法二,等我寫好程式碼執行之後就發現資料夾下面沒有觸發器,百度的時候完美的找到了解決問題的方法,原來使用方法二建立的觸發器,所存在的位置是操作表的檔案下,位置如方法一圖示。
程式碼展示
USE [JFCharge]
GO
/****** Object: Trigger [dbo].[UserIDCheck] Script Date: 2016/6/6 11:48:36 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[UserIDCheck] --建立觸發器
ON [dbo].[Bill_Info ]
AFTER insert
AS
declare @remainCash numeric(18, 0), --宣告變數
@rechargeCash numeric(18, 0),
@consumeCash numeric(18, 0),
@cancelCash numeric(18, 0),
@allCash numeric(18, 0),
@checkDate date,
@checkTime time(0),
@UserID char(16),
@Ischeck char(10)
--給變數賦值
select @remainCash = remainCash from inserted
select @rechargeCash = rechargeCash from inserted
select @consumeCash = consumeCash from inserted
select @cancelCash = cancelCash from inserted
select @allCash = allCash from inserted
select @checkDate = checkDate from inserted
select @checkTime = checkTime from inserted
select @UserID = UserID from inserted
BEGIN
--引發操作:更新表
update Recharge_Info set Ischeck='結賬' where [email protected] and [email protected]
update Cancel_Info set Ischeck='結賬' where [email protected] and [email protected]
update Card_Info set Ischeck='結賬' where [email protected] and [email protected]
END
PS:
ALTER TRIGGER [dbo].[UserIDCheck] --建立觸發器
這一行程式碼中,在首次建立的時候應該改為:
CREATE TRIGGER [dbo].[UserIDCheck] --建立觸發器
這是由於,已經建立好的觸發器,在再次檢視程式碼或是修改的時候,該觸發器只能是更新操作,而不會再次建立。
反思總結
- 思考比努力更重要。在遇到問題的時候,不要一味的借鑑,要自己思考,明明程式碼完全相同,為什麼自己的功能不能執行,就如就是一個alter和create的區別卻足足讓我花費了兩個小時的時間。
- 多總結知識。將自己的不足記錄下來,不斷充電,積累知識,觸發器的知識這次我們總結了,下次看的時候就不會陌生。
- 靈活應變。系統功能的實現,有時候不只一種方法,選擇最優的解決辦法目的是提高系統性能,為使用者服務。結賬功能,小夥伴們有的使用了儲存過程,有的使用了檢視,不斷學習,不斷總結,掌握最優的選擇權。