SQL SERVER 事务简介及使用实例

事务定义

  • 数据库的一个操作序列
  • 一个不可分割的工作单位
  • 恢复和并发控制的基本单位
  • 事务是作为单个逻辑单元执行的一系列操作,它是一个不可分割的工作逻辑单元。它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行。

事务的特性(ACID)

  • 原子性(Atomicity)事务是一个完整的操作, 事务中所有操作命令必须作为一个整体提交或回滚。如果事务中任何操作命令失败,则整个事务将因失败而回滚。
  • 一致性(Consistency)当事务完成时,数据都处于一致状态。
  • 隔离性(Isolation) 对数据进行修改的所有并发事务是彼此隔离的,它不以任何方式依赖或影响其他事务。
  • 持续性(Durability )事务提交之后,数据是永久性的,不可再回滚。

SQL SERVER 常见的三种事务:

  • 自动提交事务:是sql server默认的一种事务,每一条sql语句都被看做一个事务来处理。
delete NewsListTable  where NewsId='00001'--删除不存在内容影响0项 自动回滚
  • 显式事务:T-sql标明BEGIN TRANSACTION 开始事务,由COMMMIT TRANSACTION来提交事务,ROLLBACK TRANSACTION 来回滚事务(不执行)
BEGIN TRAN
delete NewsListTable  where NewsId='09999999'
IF(@@ERROR=0)
COMMIT
ELSE
COMMIT
  • 隐式事务:使用Set IMPLICIT_TRANSACTIONS ON将隐式事务模式打开,不用BEGIN TRAN 打开事务,只用Commit Transaction 提交事务、Rollback Transaction 回滚事务即可。
set implicit_transactions on use SM
UPDATE SC SET Score=score+1 WHERE SNO='00001' AND CNO='001'
UPDATE SC SET CNO='008' WHERE SNO='00001' AND CNO='001'
commit transaction
set implicit_transactions off

银行转账使用实例

CREATE PROC TIM
(
@moneys int ,
@p1 int ,
@p2 int,
@result nvarchar(10) output
)
as
begin
declare @p1age int
Select @p1age=a.StuAge from WZ_Students a where StuNo=@p1
if(@p1age>@moneys and @p1age>=10)
begin
begin tran
update WZ_Students set StuAge=StuAge-@moneys where StuNo=@p1
update WZ_Students set StuAge=StuAge+@moneys where StuNo=@p2
if(@@ERROR>0)
begin
set @result='失败'
rollback
end
else
begin
set @result='成功'
commit
end
end
else
begin
set @result='余额不足!'
return
end
end


----测试--------
DECLARE @RE NVARCHAR(10)
EXEC TIM 8,1,2,@RE OUT   --1  18  2  20
SELECT @RE    --成功
发布了21 篇原创文章 · 获赞 3 · 访问量 324

猜你喜欢

转载自blog.csdn.net/MrLsss/article/details/104083241