什么是事务?如何执行一个事务?
什么是事务,为什么要使用事务?
事务是指将一系列数据操作捆绑成为一个整体进行统一管理,如果某一事务执行成功,则在该事物中进行的所有数据更改均会提交,成为数据库中的永久组成部分,
如果事务执行时遇到错误且必须取消或回滚,则数据将全部恢复到操作前的状态,所有数据的更改均被清除。
简单的说:
事务是作为单个逻辑工作单元执行的一系列操作
事务是一个不可分割的工作逻辑单元
多个操作作为一个整体向系统提交,要么都执行,要么都不执行
那为啥要用事务呢?
举个栗子:在银行的日常业务中,只要是同一家银行一般账户之间都是支持互相转账的。假如A账户有1000元B账户0元,现在A账户直接转账1000元到B账户,正常的情况下使用SQL语句是先updateA账户的金额减少1000元,再使用SQL语句updateB账户增加1000元,这是没有问题的,但是在生活中我们不会一直都是一帆风顺的,有时候也会出现一些小意外,比如上面的转账的事务需要两个SQL语句才能完成,当你执行了第一条SQL的时候成功了,再执行第二条SQL的时候银行断电了,那你的数据造成的结果就是A账户少了1000块钱,B账户还是0元的大问题!!!所有我们现在就需要使用事务来解决这个问题!把这两个SQL语句当成一个整体来完成!
事务是作为单个逻辑工作单元执行的一系列操作,一个逻辑工作单元必须有四个属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)以及持久性(Durability)这些通常简称为ACID;
1.原子性(Atomicity)
事务是一个完整的操作,事务的各元素是不可分开的(原子性)。事务中的所有元素必须作为一个整体提交或回滚,如果事务中的任何元素失败,则整个事务将失败。
按照上的案列,可以把操作的两个SQL语句看成是一个整体的事务,若是只执行了一条SQL语句,那么整个事务将失败执行回滚,也就是操作会还原到最开始的情况。
2.一致性(Consistency)
当事务完成时,数据必须处于一致状态。在事务开始之前,数据库中存储的数据处于一致状态,在正在进行的事务中,数据可能处于不一致的状态,如数据可能有部分被修改,然而当事务完成的时候,数据必须再次回到已知的一致状态。
按照上的案列来说,你一开始的时候A账户1000元和B账户0元,那么加起来就是1000元,在你执行完SQL语句之后两个账户加起来还是1000元稳定的状态,不能出现损坏了数据的情况
比如出现A账户0元和B账户也是0元的情况。事务完成之后,账户的余额的总额再次恢复到一致的状态。
3.隔离性(Islation)
并发事务之间彼此隔离、独立,它不应以任何方式依赖于或影响其他事务。
对数据进行修改的所有并发事务是彼此隔离的、这表明事务必须是独立的,它不应以任何方式依赖于或影响其他事务,修改数据的事务可以在另一个使用相同数据的事务开始之前访问这些数据,或者在另一个使用相同数据的事务结束之后访问这些数据。无论你怎么修改,若是该事物没有成功提交之后都是不生效的,数据的修改一直到你成功提交事务才会生效,A账户和B账户之间的转账,永远是相对独立的。
4.持久性(durability)
事务完成后,它对数据库的修改被永远保持。
简单的说就是一个事物完成之后,它对于数据库的改变是永久性的,即使系统出现故障也是如此,也就是说,一旦提交了事务,事务的效果将会永远地保存在数据库中。
如何执行事务?
随便提一下支持事物的存储引擎有InnoDB和BDB,MyISAm引擎不支持事务的。
默认的情况下每条SQL语句就是一个事务的,即执行SQL语句后自动提交,为了达到将几个操作作为一个整体的目的,需要先关闭自动提交模式,选择手动提交或回滚事务:
语法如下:
SET autocommit=0或1;
0表示关闭自动提交。
1表示开启自动提交。
我们现在是关闭所有只需要执行SET autocommit=0;就可以了
接着我们就可以开启一个事务了
BEGIN;或者START TRANSACTION; # 开启一个事物
这个语句是提交的起点,
提交事务的语法:
COMMIT;
这个语法标志一个事务成功提交,自事务开始至提交语句之间执行的所有数据更新将永久地保存在数据库中,并释放连接时占用的资源。
还有回滚撤销事务的语法:
ROLLBACK;
用于清除自事务起点至该语句所做的所有数据的更新操作,将数据库状态回滚到事务开始前,并释放由事务控制的资源。
ROLLBACK的例子执行了SQL语句之后回滚到一开始的状态如下:
提交事务的案列:
从begin开始事务,到执行commit提交事务,数据会写入硬盘,永久地保存下来。
这是我对事务的一些总结的看法,如果觉得还行,麻烦路过的小哥哥或小姐姐点个赞…,感谢你的支持我会更加努力把博客写得更好!!!
你可能想知道Spring框架的的声明式事务:
https://hxwwhl.blog.csdn.net/article/details/118175072
什么是事务?如何执行一个事务?相关推荐
- WCF 第五章 行为 事务之选择一个事务协议-OleTx 或者WS-AT
事务管理器负责协调多个部分间的工作并通过资源管理器提交工作.资源管理器负责处理可信赖,持续存储.取决于使用的资源和服务或应用跨越的边界,WCF将使用三个事务管理器中的一个来完成事务处理.轻量级事务管理 ...
- mysql 大事务 binlog_执行大事务时出现binlog解析失败
现象:Err: table id 267724937: invalid table id, no corresponding table map event" [2019/06/25 18: ...
- 一个事务中 可以查询自己未提交的数据吗_数据库事务的方方面面
事务 是关系型数据的一个重要特性,但很少有人能对事务有全面性的了解,这篇文章就把事务的方方面面讲给你. 事务的概念 什么是事务 数据库事务(事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的 ...
- 就同一个Service类中,一个事务方法调用另外一个有事务的方法
目录 一.Spring 事务机制 二.Spring事务传播行为 三.场景总结 1.在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解是不会生效的 2. ...
- spring+mybatis 一个事务中两次查询结果不一样的问题
最近搞了一波事情,把一个接口给重构了一番,感觉还不错,同时也遇到了一些问题,这个就是其中一个. 因为重构,我在这个接口上面加了一个事务,然后就发现之前的代码跑出来的结果就不一样了,两次一模一样的查询, ...
- java分布式事务原理_JAVA分布式事务原理及应用
JTA(Java Transaction API)允许应用程序执行分布式事务处理--在两个或多个网络计算机资源上访问并且更新数据.JDBC驱动程序的JTA支持极大地增强了数据访问能力. 本文的目的是要 ...
- 10.MYSQL:什么是事务?事务的性质?事务的应用?
所谓事务,其实就是相当于操作系统里的原子性操作.它将一组对于数据库表的操作绑定在一起,只有所有操作都成功,才提交,只要有一个操作失败的话,那么就不会提交.这样的机制保证了数据库数据的原子性.一致性.隔 ...
- 七种常见分布式事务详解(2PC、3PC、TCC、Saga、本地事务表、MQ事务消息、最大努力通知)
分布式事务:在分布式系统中一次操作需要由多个服务协同完成,这种由不同的服务之间通过网络协同完成的事务称为分布式事务 一.2PC: 2PC,两阶段提交,将事务的提交过程分为资源准备和资源提交两个阶段,并 ...
- Spring事务隔离级别,事务传播行为
什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. Spring事务的隔离性(5种) 在讲隔离界别前,我们先来讲讲下基础知识 事务的特性(ACID) 原子性 ...
最新文章
- dispatch js实现_详解vuex中action何时完成以及如何正确调用dispatch的思考
- 回归素材(part2)--机器学习与R语言
- ieee期刊_论文绘图神器来了:一行代码绘制不同期刊格式图表,哈佛博士后开源...
- mysql 5.1.53_mysql 5.1.53免安装版的优化配备和精简
- C#的多线程机制探索6
- html 小于号 乱码,shell重定向(大于号,小于号,左右,21,)
- 单片机软件模拟SPI接口—加深理解SPI总线协议
- calling c++ from golang with swig--windows dll(一)
- 服务器系统性能计数器,MSRS 2008 Windows Service 性能对象的性能计数器
- 10款新鲜出炉的 jQuery 插件
- Apache Maven --- [标准目录布局]
- 分组的listview——ExpandableListView
- 079 pandas模块
- Entity Framework 5.0
- Json在线格式化校验 bejson.com
- windows虚拟显示器开发(一)
- html浅色_修改CSS样式实现网页灰色(没有颜色只有浅色黑白)的几个方法整理
- android2.2应用开发之IccCard(sim卡或USIM卡)第一篇
- java 通用权限管理_通用权限管理设计篇(一)
- 生成网络论文阅读:PGGAN(一):论文速览