zoukankan      html  css  js  c++  java
  • 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 
  • 相关阅读:
    用Repeater控件显示主从关系数据表
    transactsql高级查询(上)
    利用动态加载模板,配合ajax实现无刷新操作
    如何使用Repeater控件的模板
    总结一下DataGrid,DataList,Repeater
    ajax实现dropdownlist与datagrid或Repeater无联动刷新
    Asp.net2.0 VS 2005下的repeater控件本功能分页实例(共有 条记录 共有几页 当前第 页 首页,上一页,下一页,尾页 DropDownList跳转)
    SQLSERVER存储过程
    我的java 的实用代码
    各种数据库对应的jar包、驱动类名和URL格式
  • 原文地址:https://www.cnblogs.com/Jinnchu/p/2690283.html
Copyright © 2011-2022 走看看