不過這次敲個人版機房收費系統,自己實際去運用了一下觸發器,感覺它太給力了,節省了很多不必要的**了,減輕了系統的負擔。還節省了很多時間。真是既省時又省力。
廢話不多說了,接下來在簡單嘮叨幾句什麼是觸發器,觸發器的好處以及注意事項和自己在機房時所用的觸發器例項。
觸發器(trigger)是sql server 提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的
儲存過程,
它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,
當對乙個表進行操作( insert,delete, update)時就會啟用它執行。
好處:觸發器可通過資料庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執行這些更改。
觸發器可以強制比用
check
約束定義的約束更為複雜的約束。與 check 約束不同,觸發器可以引用其它表中的列。
注意事項:觸發器功能強大,輕鬆可靠地實現許多複雜的功能,為什麼又要慎用呢。觸發器本身沒有過錯,
但由於我們的濫用會造成資料庫及應用程式的維護困難。在資料庫操作中,我們可以通過關係、觸發器、儲存過程、
應用程式等來實現資料操作…… 同時規則、約束、預設值
也是保證資料完整性
的重要保障。如果我們對觸發器過分的依賴,
勢必影響資料庫的結構,同時增加了維護的複雜程度。
更詳細的解釋大家可以到
在簡單說一下check
約束:指定可由表中一列或多列接受的資料值或格式。
例如,可以要求 student 表的 stuid 列只允許輸入11位數的數字。
例項:學生下機
學生下機後的餘額=學生上機前的金額—消費的金額
如果不使用觸發器的話,我們在更新消費表的同時,還要編寫更新卡表中金額**。這樣編寫起來做的都是無用功。又費時又費力。
如果用觸發器就不一樣了,幾行**就把卡表中的資料跟新了。
alter trigger [dbo].[_upcardcash] --觸發器名稱
on [dbo].[t_consumeinfo] --作用的表
for update --觸發的事件
as begin
declare @id as bigint --卡號
declare @cardcash decimal(18,1) --金額
--查詢消費表中的餘額與卡號。其中deleted是臨時表,裡面的資料是沒更新之前舊的資料,
--而inserted也是乙個臨時表,它裡面的資料是更新之後新的資料
--當舊資料與新資料中cardcash不相同時,更新表t_cardinfo
select @cardcash=i.cardcash,@id=i.stuid from t_consumeinfo c,deleted d, inserted i where d.cardcash != i.cardcash
--更新卡表
update t_cardinfo set cardcash=@cardcash where stuid=@id
end
在觸發器的中,如果查詢表中的資料沒有條件限制,觸發器預設是資料表中的最後一行。(資料庫預設排序方式是主鍵從小到大)
例如:學生充值
alter trigger [dbo].[stu_recharge]
on [dbo].[t_rechargeinfo]
for insert
as begin
declare @balance decimal(18,1) --餘額
declare @id as bigint
declare @cardcash decimal(18,1) --充值金額
select @cardcash =cardcash,@id=stuid from t_rechargeinfo --查詢充值表中的最後一行的資料的充值金額與卡號
select @balance=cardcash from t_cardinfo where stuid=@id --查詢卡表中的金額
set @balance=@balance+@cardcash --總金額
set nocount on;--返回的行數,no為不返回。
update t_cardinfo set cardcash =@balance where stuid =@id --更新
end
機房收費系統之觸發器
首先我們看看觸發器是什麼?觸發器,由於我先認識的儲存過程 事務。所以我在這裡把他稱為儲存過程的小兄弟,至於為什麼,由於他們真的非常像,對於儲存過程,大家能夠在了解,這裡就不具體的介紹了。可是觸發器是什麼呢?觸發器是sql server提供給程式猿和資料分析員來保證資料完整性的一種方式,它就是與表事件...
機房重構(4) 觸發器的使用
上篇文章 機房重構 3 儲存過程 介紹了儲存過程的使用,接下來介紹一下觸發器的使用。說到觸發器,我們並不陌生,我們學習過程中涉及到非常多相關的知識,可是欠缺的實踐應用。通過這次機房收費,對觸發器有了進一步的理解。1 簡單介紹 觸發器也是一種與表事件相關的特殊的儲存過程。由事件來觸發,當對乙個表進行操...
機房收費系統之結尾
機房收費系統在這個冬月告乙個不完美的結局,剛開始接觸他的時候,各種糾結,各種逃避,各種不想做,接觸乙個新的事物,內心充滿了恐懼與排斥,機房收費系統與學生管理系統不一樣,沒有原始碼,這個時候,需要自己不斷的給予自己鼓勵,七 期的師哥師姐都做出來了,你完全有理由相信,自己也能做出來。機房收費系統來來回回...