机房收费系统重构之存储过程的使用
從一開始對于機房收費系統(tǒng)的無從下手,到現(xiàn)在已經(jīng)接近尾聲,像冬天的迷霧一樣,隨著時間散開了去,對于其也是越來越清晰,想一想,這種學(xué)習(xí)的過程還真是美妙。
當(dāng)然只學(xué)習(xí)不去總結(jié)是沒有意義的。今天我就來把存儲過程的使用總結(jié)一下。拿用戶注冊來說,就是往數(shù)據(jù)庫里添加用戶,以方便更多的用戶使用。那么用戶注冊我們要注意到什么呢?
1.通過卡號判斷用戶是否已經(jīng)存在。
如果不存在該用戶:
2.將信息寫入學(xué)生表。
3.更新充值記錄表
4、更新卡表中的余額。
我們分析可以得到,如果不存在該用戶,我們需要同時改動三個表。當(dāng)然,你可以去一條一條的去寫,但是這種做法不是我們想要的,今天是三個表,下次是三十個表,你還一條一條的寫?所以在這里我們就引入了存儲過程。
一、什么是存儲過程呢?
定義:將常用的或很復(fù)雜的工作,預(yù)先用SQL語句寫好并用一個指定的名稱存儲起來, 那么以后要叫數(shù)據(jù)庫提供與已定義好的存儲過程的功能相同的服務(wù)時,只需調(diào)用execute,即可自動完成命令。
講到這里,可能有人要問:這么說存儲過程就是一堆SQL語句而已啊?Microsoft公司為什么還要添加這個技術(shù)呢?
那么存儲過程與一般的SQL語句有什么區(qū)別呢?
二、存儲過程的優(yōu)點:
1.存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
2.當(dāng)對數(shù)據(jù)庫進行復(fù)雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。
3.存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量
4.安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán)
三、存儲過程的種類:
1.系統(tǒng)存儲過程:以sp_開頭,用來進行系統(tǒng)的各項設(shè)定.取得信息.相關(guān)管理工作,如 sp_help就是取得指定對象的相關(guān)信息
2.擴展存儲過程 以XP_開頭,用來調(diào)用操作系統(tǒng)提供的功能
3.用戶自定義的存儲過程,這是我們所指的存儲過程
常用格式
create proceduresp_name
@[參數(shù)名] [類型],@[參數(shù)名] [類型]
as
begin
.........
end
四、調(diào)用存儲過程
1.基本語法:exec sp_name [參數(shù)名]
五、刪除存儲過程
1.基本語法:
drop procedure sp_name
2.注意事項
(1)不能在一個存儲過程中刪除另一個存儲過程,只能調(diào)用另一個存儲過程。
就好比機房收費系統(tǒng)中注冊中用到的:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | CREATE PROCEDURE [dbo].[PROC_Register]? @cardNo char(10),@studentNo char(10),@name ntext,@sex nchar(10),@department char(10),@grade nchar(10),@classgrade nchar(10), @cash decimal(18,2),@cardStatue char(16),@cardType char(8), @chargeMoney decimal(10,4),@chargeDateTime datetime,@userName char(10), @statue ntext,@registerDateTime date,@checkStatue char(10) AS BEGIN ????--添加卡表 ????insert into T_CardInfo (cardNo ,studentNo ,cardStatue ,cash,cardType ,registerDateTime ,userName ,checkStatue? ) values (@cardNo ,@studentNo ,@cardStatue ,@cash,@cardType ,@registerDateTime ,@userName ,@checkStatue? ) ????--添加到學(xué)生表 ????insert into T_StudentInfo (studentNo ,name ,sex ,department ,classgrade ,statue ,grade ) values (@studentNo ,@name ,@sex,@department,@classgrade ,@statue,@grade) ????--添加到充值記錄表 ????insert into T_Recharge (cardNo ,chargeDateTime ,chargeMoney ,userName ) values (@cardNo ,@chargeDateTime,@chargeMoney,@userName) END |
像我們需要修改三張表一樣,當(dāng)一件同樣的事情,需要我們來做三次,我們就要敢于去想一個比較高效的辦法,像我之前就沒有去想的這樣一件事情,所以,我們還要去敢想,因為不知道有多少人在我們敢想之前做了出來。
總結(jié)
以上是生活随笔為你收集整理的机房收费系统重构之存储过程的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP mysql 事务处理实例
- 下一篇: 机房收费系统中——存储过程中加入事务,实