zoukankan      html  css  js  c++  java
  • SqlCollections

      1 --==============================事务===============================
      2 --简单的事务
      3 --Messages:1 2 4 6
      4 print 1
      5 --事务开始
      6 BEGIN TRAN
      7 
      8 --插入一条数据
      9 INSERT INTO 类别(类别名称)
     10 VALUES ('bbb')
     11 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)    --@@ERROR = 0代表正常,否则出错
     12 GOTO TranRollBack
     13 
     14 print 2
     15 
     16 --插入一条数据
     17 --已经有了aaa,会出错!
     18 INSERT INTO 类别(类别名称)
     19 VALUES ('aaa')
     20 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)    
     21 GOTO TranRollBack
     22 
     23 PRINT 3
     24 
     25 --插入一条数据
     26 INSERT INTO 类别(类别名称)
     27 VALUES ('ccc')
     28 
     29 IF(@@ERROR > 0)
     30 BEGIN
     31     TranRollBack:
     32         PRINT 4
     33         --回滚事务
     34         ROLLBACK TRAN
     35 END
     36 ELSE
     37 BEGIN
     38     PRINT 5
     39     --提交事务
     40     COMMIT TRAN
     41 END
     42 
     43 print 6
     44 
     45 --嵌套事务
     46 --由于事务的原子性,事务内的所有语句要么全部执行,要么全部不执行,所以内层的COMMIT是没有意义的,仅仅是内层事务结束的标志
     47 --内层事务若触发ROLLBACK,会回滚到外层事务之前的状态,而不是内层事务开始时的状态!
     48 --82 rows
     49 SELECT COUNT(1) FROM 产品
     50 --开始事务
     51 BEGIN TRAN
     52 --插入一条数据
     53 INSERT INTO 产品(产品名称,类别ID) VALUES('西瓜汁',1)
     54 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)
     55     GOTO TranRollback
     56 --83 rows
     57 SELECT COUNT(1) FROM 产品
     58 --嵌套事务
     59     BEGIN TRAN
     60     --插入一条数据,会出错!
     61     INSERT INTO 产品(产品ID) VALUES(1)
     62     IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)
     63     BEGIN
     64         ROLLBACK TRAN
     65     END
     66     ELSE
     67     BEGIN
     68         COMMIT TRAN
     69     END
     70 --82 rows
     71 SELECT COUNT(1) FROM 产品
     72 --再插入一条数据
     73 INSERT INTO 产品(产品名称,类别ID) VALUES('可乐',1)
     74 --83 rows
     75 SELECT COUNT(1) FROM 产品
     76 IF @@ERROR > 0
     77 BEGIN
     78     TranRollback:
     79         ROLLBACK TRAN
     80 END
     81 ELSE
     82 BEGIN
     83     COMMIT TRAN
     84 END
     85 --83 rows
     86 SELECT COUNT(1) FROM 产品
     87 
     88 --事务保存点
     89 --使用事务保存点,可以在内层事务回滚时只回滚到该内层事务的开始状态,从而可以实现有选择的回滚一部分
     90 --82 rows
     91 SELECT COUNT(1) FROM 产品
     92 --开始事务
     93 BEGIN TRAN
     94 --插入一条数据
     95 INSERT INTO 产品(产品名称,类别ID) VALUES('西瓜汁',1)
     96 IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)
     97     GOTO TranRollback
     98 --83 rows
     99 SELECT COUNT(1) FROM 产品
    100 --嵌套事务
    101     --保存事务位置
    102     SAVE TRAN 嵌套事务
    103     BEGIN TRAN
    104     --插入一条数据,会出错!
    105     INSERT INTO 产品(产品ID) VALUES(1)
    106     IF(@@ERROR > 0 OR @@ROWCOUNT <> 1)
    107     BEGIN
    108         ROLLBACK TRAN 嵌套事务    --此时要加上事务保存点的名称
    109     END
    110     ELSE
    111     BEGIN
    112         COMMIT TRAN 嵌套事务    --此时要加上事务保存点的名称
    113     END
    114 --83 rows
    115 SELECT COUNT(1) FROM 产品
    116 --再插入一条数据
    117 INSERT INTO 产品(产品名称,类别ID) VALUES('可乐',1)
    118 --84 rows
    119 SELECT COUNT(1) FROM 产品
    120 IF @@ERROR > 0
    121 BEGIN
    122     TranRollback:
    123         ROLLBACK TRAN
    124 END
    125 ELSE
    126 BEGIN
    127     COMMIT TRAN
    128 END
    129 --84 rows
    130 SELECT COUNT(1) FROM 产品
  • 相关阅读:
    JavaScript快速入门-DOM对象
    JavaScript快速入门-ECMAScript对象介绍
    JavaScript快速入门-ECMAScript函数
    JavaScript快速入门-ECMAScript运算符
    [转] boost::function用法详解
    [转] [翻译]图解boost::bind
    [转] Git 分支
    [转] 多线程下变量-gcc原子操作 __sync_fetch_and_add等
    [转] Boost智能指针——scoped_ptr
    [转] linux下的c/c++调试器gdb
  • 原文地址:https://www.cnblogs.com/sky-sun/p/4045467.html
Copyright © 2011-2022 走看看