• SQL 事务


     1 --BeginTrans:开始事务
     2 --CommitTrans:提交事务
     3 --RollBackTrans:回滚事务
     4 --事务具有原子性,要么不执行,要么全执行,一旦成功执行永久保存。下面是个转账的事务应用的例子。
     5 If Not Exists (Select * From sysobjects Where name = 'bank')
     6 Begin 
     7  Create Table bank
     8  (
     9   bankid int identity(1,1) Primary Key ,
    10   username varchar(50) not null,
    11   rmbnum float not null
    12  )
    13 End  
    14 
    15 -- add constraint  限制帐户存额不小于0 (没有事务,失败案例)
    16 Alter Table bank add constraint CK_bank_rmbnum check(rmbnum>0)
    17 
    18 -- init table bank 
    19 Insert Into Bank (username,rmbnum) Values ('张三',10000)
    20 Insert Into Bank (username,rmbnum) Values ('李四',10000)
    21 Insert Into Bank (username,rmbnum) Values ('王五',10000)
    22 Insert Into Bank (username,rmbnum) Values ('小儿',10000)
    23 
    24 
    25 -- 执行转账 将张三的帐户上划20000万到李四的账户上
    26 declare @howmuch float 
    27 set @howmuch = 20000
    28 update bank set rmbnum = rmbnum - @howmuch where username = '张三'  --由于约束限制,更新失败
    29 update bank set rmbnum = rmbnum + @howmuch where username = '李四'
    30 -- 以上过程前者失败后者成功。因为张三账户余额不足。
    31 
    32 
    33 /*
    34 事务的格式:
    35 Begin TransAction  --开始事务传输
    36 Commit TransAction  --提交事务
    37 RollBack TransAction --回滚事务
    38 */
    39 
    40 update bank set rmbnum = 10000
    41 
    42 set nocount on  -- 设置不显示影响的行数
    43 print('查看转账前帐户余额:')
    44 Select * From bank 
    45 Begin TransAction                                        --事务开始,带事务案例开始
    46 declare @errno int 
    47 declare @num int 
    48 set @errno=0 
    49 set @num=100000
    50 --将王五的帐户减少@num
    51 Update Bank set rmbnum = rmbnum - @num where username = '王五'
    52 set @errno = @errno + @@error  --加上执行过程中产生的错误编号       --记录错误
    53 -- 将小儿的帐户增加@num
    54 update bank set rmbnum = rmbnum + @num where username = '小儿'
    55 set @errno = @errno + @@error                              --记录错误
    56 
    57  
    58 -- 根据是否产生错误决定事务是提交还是撤销
    59 If @errno > 0 
    60  begin 
    61   print('事务处理失败,回滚事务!')
    62   rollback TransAction                                    --回滚事务
    63  end 
    64 Else
    65  Begin 
    66   print('事务处理成功,提交事务!')
    67   Commit TransAction                                     --提交事务
    68  End 
    69  
    70 print('查看转账后庄户余额:')
    71 Select * From Bank 
  • 相关阅读:
    你现在的技能,是不是只剩下给别人点赞了?
    web编码(转)
    Android 官方文档:(二)应用清单 —— 2.26 <uses-permission>标签
    BackTrack5 (BT5)无线password破解教程之WPA/WPA2-PSK型无线password破解
    开源 java CMS
    EM算法原理
    OpenCV2马拉松第14圈——边缘检測(Sobel,prewitt,roberts)
    winzip15.0注冊码
    什么是积分墙?
    Bitmap工具类
  • 原文地址:https://www.cnblogs.com/Jinnchu/p/2690283.html
Copyright © 2020-2023  润新知