事务

作者: 肉肉要次肉 | 来源:发表于2017-06-17 18:13 被阅读16次

先来跟大家说一下,为什么需要事务呢?

假设一个银行转账的问题:

假设资金从账户A转到账户B,至少需要两步

1、账户A的资金减少

2、账户B的资金增加

图1

现在我们先来创建一张带有两条信息的银行表,如图2

图2 创建表信息

接下来,我们来模拟一下银行转账过程。

图3 图4

首先我们可以看到图4,显示报错,但是图3表中的信息张小虎的转账交易没有执行,但是王晓丽的交易已经执行加了500元,经过这样的转账之后,张小虎和王晓丽余额由原来的2500,变成3000了。这样就变成银行亏损了500,这种情况,银行是不允许发生的。

那实际的转出和转入交易过程,都是一个整体,其中有一条交易不执行或失败,将撤销对这转出和转入账户的所有更改。这个时候就需要事务来完成。


事务的概念及特性:

事务(TRANSACTION)是作为单个逻辑工作单元执行的一系列操作,多个操作作为一个整体向系统提交,要么都执行,要么都不执行。事务是一个不可分割的工作逻辑单元。

事务必须具备以下四个属性,简称ACID属性:

      1、原子性(Atomicity):

          事务是一个完整的操作,事务的各步操作是不可分的(原子的);要么都执行,要么都不执行。

     2、一致性(Consistency):

         当事务完成时,数据必须处于一致状态,要么转账成功,要么转账失败

     3、隔离性(lsolation):

         张三和李四之间的转账与王五和赵二之间的转账,永远是相互独立的

     4、永久性(Durability):

         事务完成后,它对数据库的修改被永久保存


创建事务:

开始事务:BEGIN TRANSACTION   (标记一个事务的起始点)

提交事务:COMMIT TRANSACTION  

      (标记一个事务的成功结束,自事务开始至提交语句之间,所执行的所有数据,将被永久的保存在数据库的文件当中,并且释放链接时所占用的资源)

回滚(撤销)事务:ROLLBACK TRANSACTION

      (如果事务发生失败或错误,回滚事务能够清除,自事务起始点至该语句所做的所有数据的更新操作,将事务状态回滚到事务开始之前,并释放由事务控制的一个资源)


操作步骤:

【1】BENGIN TRAN / TRANSACTION

【2】声明变量用于累加错误号,错误号使用全局变量@@ERROR

【3】为【2】中声明的变量赋初值为0

【4】增、删、改 T-SQL语句

【5】SET @变量=@变量+@@ERROR     --累计错误号

。。。。

重复【4】、【5】直到所有的业务完成

【6】使用IF...ELSE判断累加的错误号是否>0,大于0就回滚,否则就提交

图2

图2我们看到交易失败,没有转账成功。

图3

图3,我们看到这样交易成功。

未完待续。。。

相关文章

  • java事务

    1、java事务介绍 2、JDBC事务 3、JTA事务 1、java事务介绍 java事务分类:JDBC事务、...

  • 事务、MySQL与Python交互、Python 中操作 MyS

    1、事务 事务操作分两种:自动事务(默认)、手动事务 手动事务的操作流程 开启事务:start transacti...

  • 数据库事务书目录

    数据库事务 事务概念 本地事务 全局事务 全局事务的定义 J2EE中全局事务的实现 全局事务的优缺点 基于消息的分...

  • MySQL事务

    MySQL-innodb-事务 事务的特性 事务的生命周期 失败的事务: 事务的控制语句 面试题 事务日志-red...

  • mysql事务隔离机制及其隔离级别、实现原理分析

    目录 事务特性ACID属性 并发事务带来的问题 事务隔离级别 事务实现原理 事务特性ACID属性 事务特性指的就是...

  • MULE事务配置

    在mule的事务可能为jdbc事务,jms事务,xa事务等,多种事务.这里讲解事务的几个动作: 相关的文档:htt...

  • 事务—事务模型

    程序猿基础知识的学习、理解、整理——事务(方方土) 事务,看似很简单,其实很复杂,作为一个程序猿,你对事务到底了解...

  • 事务—XA事务

    程序猿基础知识的学习、理解、整理——事务(方方土) 什么是XA事务?在什么场景下会出现XA事务? @Transac...

  • 事务—事务模式

    程序猿基础知识的学习、理解、整理——事务(方方土) 什么是事务模式?这里提到的事务模式,主要是指在系统设计过程中的...

  • JDK动态代理给Spring事务埋下的坑

    service 模拟动态代理事务 测试类 预测结果模拟事务:开启事务execute doLink模拟事务:关闭事务...

网友评论

      本文标题:事务

      本文链接:https://www.haomeiwen.com/subject/dglbqxtx.html