机房收费系统重构之存储过程的使用
從一開始對于機房收費系統的無從下手,到現在已經接近尾聲,像冬天的迷霧一樣,隨著時間散開了去,對于其也是越來越清晰,想一想,這種學習的過程還真是美妙。
當然只學習不去總結是沒有意義的。今天我就來把存儲過程的使用總結一下。拿用戶注冊來說,就是往數據庫里添加用戶,以方便更多的用戶使用。那么用戶注冊我們要注意到什么呢?
1.通過卡號判斷用戶是否已經存在。
如果不存在該用戶:
2.將信息寫入學生表。
3.更新充值記錄表
4、更新卡表中的余額。
我們分析可以得到,如果不存在該用戶,我們需要同時改動三個表。當然,你可以去一條一條的去寫,但是這種做法不是我們想要的,今天是三個表,下次是三十個表,你還一條一條的寫?所以在這里我們就引入了存儲過程。
一、什么是存儲過程呢?
定義:將常用的或很復雜的工作,預先用SQL語句寫好并用一個指定的名稱存儲起來, 那么以后要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。
講到這里,可能有人要問:這么說存儲過程就是一堆SQL語句而已啊?Microsoft公司為什么還要添加這個技術呢?
那么存儲過程與一般的SQL語句有什么區別呢?
二、存儲過程的優點:
1.存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
2.當對數據庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少數據庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
三、存儲過程的種類:
1.系統存儲過程:以sp_開頭,用來進行系統的各項設定.取得信息.相關管理工作,如 sp_help就是取得指定對象的相關信息
2.擴展存儲過程 以XP_開頭,用來調用操作系統提供的功能
3.用戶自定義的存儲過程,這是我們所指的存儲過程
常用格式
create proceduresp_name
@[參數名] [類型],@[參數名] [類型]
as
begin
.........
end
四、調用存儲過程
1.基本語法:exec sp_name [參數名]
五、刪除存儲過程
1.基本語法:
drop procedure sp_name
2.注意事項
(1)不能在一個存儲過程中刪除另一個存儲過程,只能調用另一個存儲過程。
就好比機房收費系統中注冊中用到的:
?| 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? ) ????--添加到學生表 ????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 |
像我們需要修改三張表一樣,當一件同樣的事情,需要我們來做三次,我們就要敢于去想一個比較高效的辦法,像我之前就沒有去想的這樣一件事情,所以,我們還要去敢想,因為不知道有多少人在我們敢想之前做了出來。
總結
以上是生活随笔為你收集整理的机房收费系统重构之存储过程的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP mysql 事务处理实例
- 下一篇: 机房收费系统中——存储过程中加入事务,实