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 
  • 相关阅读:
    解决hadoop中 bin/hadoop fs -ls ls: `.': No such file or directory问题
    ERROR namenode.NameNode: Failed to start namenode. java.lang.IllegalArgument
    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [/Users/lonecloud/tomcat/apache-tomcat-7.0.70 2/webapps/myproject/WEB-INF/classes/cn/lone
    创建Maven web工程不能解析EL表达式的解决办法
    mac中的myeclipse的控制台中文乱码问题解决办法
    Java采用内部构造器Builder模式进行对类进行构建
    java定时器的使用(Timer)
    传统的线程技术
    线程的理解
    Ibatis学习总结7--SqlMapClient 执行 SQL 语句
  • 原文地址:https://www.cnblogs.com/Jinnchu/p/2690283.html
Copyright © 2011-2022 走看看