重构——注册——存储过程+事务
来源:互联网 发布:seo常用的工具 编辑:程序博客网 时间:2024/05/29 02:45
重构做到注册的时候遇到了点困难,简单的分析一下需求:
通过图可以看出,为了解耦,我将卡与学生分成了两张表,并且,卡表与学生表之间有外键约束关系,也就是说,必须先将学生信息填到T_Student表中,才能注册卡,在卡表中添加信息,还有就是需要将注册卡时的初始金额放到充值表中去。也就是说注册的需求就是添加学生表、添加卡表、添加充值表。需要同时对三张表进行操作,执行多条SQL语句,这时候就要用到存储过程了。
首先我们来看一下什么是存储过程?
定义:用SQL语句和流程控制语句编写的模块。
优点:提高运行速度。
增强了SQL的功能和灵活性
降低网络的通信量
减轻了程序编写的工作量
间接实现安全控制功能
存储位置:以数据库对象的形式存储在数据库中。
了解了存储过程的定义我们先去数据库中建立一个存储过程。
重构数据库——可编程性——存储过程——(右击)新建存储过程
数据库会自动给你生成一个存储过程的模板。
刚才我们也分析过了,对这三张表的操作要么都执行,要么都不执行,大家是不是想到了什么——事务。咱们想到的正是事务的原子性。
问题又来了,什么是事务?
定义:构成单一逻辑工作单元的操作集合,要么完整的执行,要么不执行。
作用:保证数据库中数据总是正确的。
性质:原子性、一致性、隔离性、持久性。
查阅了一些资料,我发现事务是可以加在存储过程中的,于是关于注册的存储过程就这么诞生了。
<span style="font-size:18px;"><strong>USE [chonggou]GO/****** Object: StoredProcedure [dbo].[PEOC_Register] Script Date: 01/31/2016 17:39:01 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO-- =============================================-- Author:<郑涛>-- Create date: <2016年月日>-- Description:<Register,,>-- ============================================= ALTER PROCEDURE [dbo].[PEOC_Register]-- Add the parameters for the stored procedure here--定义变量@CardID nchar(10),@StudentID nchar(10),@Cash nchar(10),@UserID nchar(10),@Isuse nchar(10),@IsCheck nchar(10),@Carddate nchar(10),@Cardtime nchar(10),@CardType nchar(10),@Computer nchar(10),@Studentname nchar(10),@Sex nchar(10),@Department nchar(10),@Grade nchar(10),@Sclass nchar(10),@Explain nchar(10)ASBEGINdeclare @error int --声明变量(事务)set @error = 0 --赋值(事务)BEGIN TRANSACTION --事务开始语句--添加学生表insert into dbo.T_Student (StudentID,Studentname ,Sex ,Department ,Grade ,SClass ,Explain )values (@StudentID ,@Studentname ,@Sex ,@Department ,@Grade ,@Sclass ,@Explain )。set @error = @error + @@ERROR --事务--添加卡表insert into dbo.T_Card (CardID ,StudentID ,Cash ,UserID ,Isuse ,Ischeck ,Carddate ,Cardtime ,Cardtype ,Computer )values (@CardID ,@StudentID ,@Cash ,@UserID ,@Isuse ,@IsCheck ,@Carddate ,@Cardtime ,@CardType ,@Computer)set @error = @error + @@ERROR --事务--添加充值表insert into dbo.T_Recharge(StudentID ,CardID ,Addmoney ,Rechargedate ,Rechargetime,UserID ,Ischeck)values(@StudentID ,@CardID,@Cash ,@Carddate ,@Cardtime ,@UserID ,@IsCheck )set @error =@error + @@ERROR --事务if @error <> 0ROLLBACK --发生错误回滚elseCOMMIT --不发生错误插入END </strong></span>
这是一个完整的存储过程,还是有点问题,咱们都能看到@error是咱们自己为了事务自定义的变量。那么@@error又是什么呢?我们也没有定义过呀,原来是这样的:
@@error是系统函数,当没有发生错误时返回0,如果发生错误时@@error<>0,并返回错误号,每个SQL语句执行完,@@error值都会变。
了解了这些我们就能很容的看懂这个事务了。
重构还真是开阔了我的眼界,我已经对下面的内容迫不及待了!
- 重构——注册——存储过程+事务
- 存储过程中使用事务——机房重构
- 【机房重构】——存储过程+事务
- 事务—存储过程
- 机房重构——存储过程
- 机房重构——存储过程
- 存储过程——重构实战
- 【机房重构】——存储过程
- 【机房重构】——存储过程
- 机房重构——存储过程
- 【机房重构】——存储过程
- 【机房重构】——存储过程
- 机房重构—存储过程
- 机房收费系统中——存储过程中加入事务,实现学生注册
- 机房收费系统中——存储过程中加入事务,实现学生注册
- VB.NET版机房重构之存储过程+事务实现注册
- 机房收费——存储过程+事务
- 机房重构—注册
- 使用eclipse的Hibernate插件创建session完成对数据库的记录追加
- EFI基本概念之PPI
- php Session存储到Redis的方法
- FFmpeg在iOS上完美编译
- 回文树(Palindrome Tree)/回文自动机(Palindrome Automaton)学习小记
- 重构——注册——存储过程+事务
- JavaScript快速入门(三)
- dede企业会员调用的sql函数
- JavaScript快速入门(四)
- LeetCode Algorithms #217 <Contains Duplicate>
- git fetch 与git pull 区别
- JavaScript第一课——使用JavaScript
- python 时间方法
- android-Storing and Searching for Data,Remaining Backward Compatible