SQL 存储过程入门(事务)(四)

本篇我们来讲一下事务处理技术。

为什么要使用事务呢,事务有什么用呢,举个例子。

假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果都顺利插入成功了,当然没有问题,如果任意一张表插入失败了,而另一张表插入成功了,插入成功的表就是垃圾数据了。我们要判断,任意一张表插入失败都回滚,就是都不插入,这就是事务的基本使用。

一,sql事务定义

所谓事务是用户定义的一个数据库操作序列,是一个不可分割的工作单位。他包含的所有数据库操作命令作为一个整体一起向系提交或撤消 ,这些操作要么全做,要么全不做,

 例如在关系数据库中,一个事务可以是一条sql语句,或者是一组sql语句或者是整个程序。

 

二,sql事务语句

开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSACTION
回滚事务:ROLLBACK TRANSACTION

事务通常是以begin transaction开始的,以commit或rollback 结束,commit表示提交,既提交事务的所有操作。具体的说就是将事务中所有对数据库的更新写到磁盘

上的物理数据中去,事务正常结束。

Rollback表示回滚,在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部取消,回滚到事务开始时的状态。这里的操作

指对数据库的更新操作。

 

三,事务的特性(ACID Propertites)

原子性(Atomicity):事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(Consistency):事物完成时,数据必须是一致的,也就是说,和事物开始之前,数据存储中的数据处于一致状态。保证数据的无损

隔离性(Isolation):一个事务的执行不能被其他事务干扰。并发执行的各个事务之间不能互相干扰。

持续性(Durability):指一个事务一旦提交,它对数据库中数据的改变时永久性的。

 

四,存储过程使用事务


这里做好准备工作,建立一张表,插入一条数据。

--新建表
create table userinfo
(ID  int identity(1,1) ,
 UserName varchar(20)  primary key,
 UserPwd varchar(20)   ,
 RegisterTime datetime 
)
--初始化插入一条记录
insert into userinfo(username,userpwd,RegisterTime) 
values('admin','admin',getdate())

select * from userinfo

-------------------

ID userName UserPwd RegisterTime

1 admin admin 2013-04-13 10:30:36.387

 

 从表结构看出,UserName是主键,是唯一值,现在要插入两条数据

 Create Procedure  MyProcedure
    AS
       Begin
           Set    NOCOUNT    ON; 
           Set XACT_ABORT on; --这句话非常重要
           
           Begin  Tran   --开始事务
           
           insert into userinfo(username,userpwd,RegisterTime) values('admin','admin',getdate())
           insert into userinfo(username,userpwd,RegisterTime) values('jack','jack',getdate())

           Commit Tran       --提交事务
       End

执行

exec    MyProcedure

/*
消息 2627,级别 14,状态 1,过程 MyProcedure,第 9 行
违反了 PRIMARY KEY 约束 'PK__userinfo__C9F284577F60ED59'。不能在对象 'dbo.userinfo' 中插入重复键。

*/
--查看数据库

------------------------------------------------
12    admin    admin    2013-04-13 10:41:22.457
上面说了 Set XACT_ABORT on; 这句话
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值