机房收费系统重构之存储过程的使用
从一开始对于机房收费系统的无从下手,到现在已经接近尾声,像冬天的迷雾一样,随着时间散开了去,对于其也是越来越清晰,想一想,这种学习的过程还真是美妙。 当然只学习不去总结是没有意义的。今天我就来把存储过程的使用总结一下。拿用户注册来说,就是往
从一开始对于机房收费系统的无从下手,到现在已经接近尾声,像冬天的迷雾一样,随着时间散开了去,对于其也是越来越清晰,想一想,这种学习的过程还真是美妙。
当然只学习不去总结是没有意义的。今天我就来把存储过程的使用总结一下。拿用户注册来说,就是往数据库里添加用户,以方便更多的用户使用。那么用户注册我们要注意到什么呢?
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)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程。
就好比机房收费系统中注册中用到的:
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这样就可以轻松的操作在三个表中,当然存储过程远远不止这些,并且在以后学习中,我们还会继续研究。
像我们需要修改三张表一样,当一件同样的事情,需要我们来做三次,我们就要敢于去想一个比较高效的办法,像我之前就没有去想的这样一件事情,所以,我们还要去敢想,因为不知道有多少人在我们敢想之前做了出来。
上一篇: 下,mysql语句的疑问?提供具体的思路
下一篇: 文件目录写下报错