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 产品
时间: 2024-07-31 08:45:27

SqlCollections - 事务的相关文章

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

MySQL的事务与事务隔离

MySQL中自从引入InnoDB引擎后,在MySQL中就支持事务,事务就是一组原子性的查询语句,也即将多个查询当作一个独立的工作单元,平时通过提交工作单元来完成在事务中的相应的查询或修改,在能支持事务的数据库中必须要满足ACID测试,即事务的四个特性: A:Atomicity,原子性(都执行或者都不执行) C:Consistency,一致性(从一个一致性状态转到另外一个一致性状态) I:Isolaction,隔离性(一个事务的所有修改操作在提交前对其他事务时不可见的) D: Durability

(十五)PL/SQL事务

数据库事务是一个工作的原子单元,其可以由一个或多个相关的SQL语句组成.所谓的原子性就是数据库的修改所带来的构成事务的SQL语句可以集体被提交,即永久到数据库或从数据库中(撤消)回滚.一个成功执行的SQL语句和提交的事务不一样.即使一个SQL语句执行成功,除非包含该语句的事务被提交,但也可以回滚和声明(S)的所有更改可以撤消. 一.开始事务事务都有开始和结束.事务开始时有下列事件之一:  连接到数据库后执行的第一个SQL语句.  在事务完成之后发出每一个新的SQL语句完成. 二.提交事务事务是通

spring事务没回滚

最近遇见一个问题,用spring管理实务,在service层处理数据,保存数据时出现异常,但没有回滚,检查了一下,发现是因为我用try catch将异常进行捕获了,没有抛出导致的:默认spring事务只在发生未被捕获的 runtimeexcetpion时才回滚. 处理发法一:捕获异常后,新生成runtimeexcetpion: try { userDao.save(user); userDao.update(user); } catch (Exception e) { logger.info("

回滚的意义---JDBC事务回滚探究

JDBC手动事务提交回滚的常见写法一直是rollback写在commit的catch之后: try{ conn.setAutoCommit(false); ps.executeUpdate(); ps.executeUpdate(); conn.commit(); }catch(Exception e){ conn.rollback(); } 但是,这种回滚是没有意义的: 一旦commit前出错, 就不提交了, 回滚无用 一旦commit了, 说明没错, 不用回滚 找到一篇和我观点相同的文章:

我的学习之路_第二十二章_事务

JDBC事务 [事务] 作用: 保证多条SQL语句,要么都执行成功,要么都执行失败. mysql数据库,执行SQL语句,自动开启事务,提交事务,回滚事务,把数据永久保存 oracle数据库,执行SQL语句,手动开始会务,提交事务,回滚事务,把数据永久保存. Connection接口中和事务有关的方法: 无返回值 setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态. 参数:autoCommit : true表示自动提交模式, false表示禁用

SQL事务的四种隔离级别

1未提交读(Read uncommitted):完成不锁表,所以会出现脏数据.2提交读(Read committed):1.事务1中update才锁表,可以select到最新数据. 事务2select查不到数据. 会一直等.加上WITH (NOLOCK)就可以读了. 2.select是不锁表,所以其他事务可以修改数据.当有两个select时, 第二个select会出现脏数据.不可重复读. 3可重复读(Repeatable read): 解决提交读不可重复读的问题的,两次查询到的结果一致. 这只能

数据库事务

事务的四个特性 (ACID) ,分别是原子性( Atomicity), 一致性( Consistency), 隔离性( Isolation), 持久性( Durability).一致性是事务的目的,原子性,隔离性,持久性是一致性的必要条件. 隔离性:多个并发事务之间要相互隔离,对于任意两个并发的事务T1和T2,在事务T1看来,T2要么在T1开始之前就已经结束,要么在T1结束之后才开始,这样每个事务都感觉不到有其他事务在并发地执行. 隔离级别有四种: 1.Serializable :最严格的级别,

Redis系列六 Redis事务

Redis事务 1.介绍 在Redis事务中可以一次执行多个命令,本质是一组命令的集合.一个事务中的所有命令都会序列化,按顺序地串行化执行而不会被其它命令插入,不许加塞. 2.事务的作用 一个队列中,一次性.顺序性.排他性的执行一系列命令. 3.事物执行五中情况 case1:正常执行 执行exec全部成功 Case2:放弃事务 执行Discard Case3:全体连坐 在向事物队列中添加命令的时候报错,然后执行Exec会全部失败. Case4:冤头债主 在向事物队列中添加命令的时候没有报错,但在