什么是事物?

事物说白了就是一件事从开始发生到结束的整个过程。在MySQL里事务是一组不可被分割执行的SQL语句集合,如果有必要,可以撤销。 这样可以确保数据的一致性。rollback事物回滚,则事物执行失败,保证了数据安全。

事务和事务回滚的应用

mysql中默认sql语句会自动commit到数据库,在默认情况下MySQL开启的是autocommit模式,也就是隐含的将每条语句当做一个事务处理,每条SQL都会被自动提交。

show variables like "autocommit";

事物应用:开启事物

mysql> start transaction;
mysql>… sql命令

#此时autocommit被禁用,SQL命令不会对数据库中数据做修改

终止事物

mysql>commit;
或
mysql>rollback;

注意:事务回滚rollback只针对表记录的操作,增、删、改,对创建库、表的操作无效

案例:

建行卡转账农行卡5000

  1. 转账中……
  2. 建行-5000
  3. 农行+5000
  4. commit;转账成功
  5. rollback;回滚,转账失败

过程模拟

表1、CCBcreate table CCB(
name varchar(20),
money int);insert into CCB values("zhuanqian",10000);
表2、ICBCcreate table ICBC(name varchar(20),money int);insert into ICBC values("shouqian",10000);开始转账mysql> start transaction;mysql> update CCB set money=5000 where name="zhuanqian";mysql> update ICBC set money=...断电了;mysql> rollback;# select * from CCB 钱并未减少,没有执行命令

事物的性质

事务的机制通常被概括为“ACID”原则即原子性(A)、稳定性(C)、隔离性(I)和持久性(D)。
  原子性:构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。
  稳定性:数据库在事务执行前后状态都必须是稳定的。
  隔离性:事务之间不会相互影响。
  持久性:事务执行成功后必须全部写入磁盘。

事物的并发问题

1、脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

  2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

  3、幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。

事物的隔离级别

至于事物性质实现原理,以我现水平暂不深入,以后会做深入了解

事务嵌套

当执行一个START TRANSACTION指令时,会隐式的执行一个commit操作,就是开启新事务时,自动提交原来的旧事务
所以没办法开启两个事务,只能通过savepoint来实现嵌套事务

drop table t;
create table t(a int, primary key(a));
begin;
insert into t(a) values(1);
SAVEPOINT s;
insert into t(a) values(2);
ROLLBACK to SAVEPOINT s;
commit;

因为异常,事务回滚,保存点的异常向上传播到主事务,主事务也回滚
表中没有元素

MySQL事物和事物回滚相关推荐

  1. mysql更新数据能回滚吗_mysql更新数据能回滚吗?如何实现呢?

    不熟悉使用mysql数据库的朋友们,可能会对其有非常多的小问题,例如说,mysql更新数据可以回滚吗?我们应该如何去实现呢? 操作数据库时候难免会因为"大意"而误操作,需要快速恢复 ...

  2. MySQL调用mongodb事务回滚_SpringBoot整合MongoDB,在多数据源下实现事务回滚。

    项目中用到了MongoDB,准备用来存储业务数据,前提是要实现事务,保证数据一致性,MongoDB从4.0开始支持事务,提供了面向复制集的多文档事务特性.能满足在多个操作,文档,集合,数据库之间的事务 ...

  3. php myisam,php+mysql怎么实现事务回滚,表是MyISAM类型的?

    MyISAM不支持事务,但如果遇到数据库错误,怎么实现回滚?例如: 一段程序要先插入a表,然后再插入b表. 逻辑如下行不行: aResut=doInsertA if(aResut){ bResult= ...

  4. mysql的procedure错误回滚问题

    先科普一点知识:mysql在一个事物中发生错误时,是不会回滚整个事物的. 我们先证明这点 mysql> desc wzy; +-------+---------+------+-----+--- ...

  5. mysql分类和事务回滚

    主要内容: ***数据定义语言DDL重点 ***数据操纵语言DML重点 数据查询语言DQL重点 ---事务控制语言TCL ---数据库控制语言DCL ---主键(primary key) ---数据冗 ...

  6. mysql回滚与错误提示_对mysql事务提交、回滚的错误理解 – jae – 博客园

    一.起因 begin或者START TRANSACTION开始一个事务 rollback事务回滚 commit 事务确认 人们对事务的解释如下:事务由作为一个单独单元的一个或多个 这句话本身没有什么问 ...

  7. mysql更新数据能回滚吗_MySQL数据回滚-误更新和删除时快速恢复

    这世界上有后悔药 – www.houhuiyao.cc 后悔药数据恢复 站长语 前面的内容也提到过update或delete误更新删除了数据后如何恢复.实际生产环境中常常因各种不同场景导致一些办法有效 ...

  8. mysql新增表字段回滚_MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

  9. mysql用jdbc执行回滚吗_java – mysql jdbc不成功回滚

    我有一些 Java代码使用JDBC连接到 MySQL数据库,然后代码执行一些读操作然后单个更新,所有使用相同的连接.如果有异常,则调用connection.rollback();如果没有异常,则调用c ...

  10. MySQL的rollback--事务回滚

    MySQL version:5.7 首先:事务回滚只用于DML,不适用于DDL.对于DDL的回滚,以后有时间再说. 关于rollback和commit,MySQL的文档已经说的很详细了,选择其中一个简 ...

最新文章

  1. window与共享文件夹访问相关的四个服务
  2. 为啥开发的文档能力是核心竞争力之一
  3. php用rabbit可以干嘛,RabbitMQ能干什么,有什么用,RabbitMQ入门
  4. STM32L0开发——ADC多通道采集,IDE和IAR开发注意事项
  5. WebKit DOM Event (一)
  6. Docker设置HTTP代理
  7. 马老师 生产环境mysql主从复制、架构优化方案
  8. 默认文献工具_工具分享??超好用的SCI外文文献下载工具
  9. 元素凸起效果_被誉为作物“生殖元素”的“硼”到底有多重要?看完你就明白了...
  10. 20172313 2018-2019-1 《程序设计与数据结构》第六周学习总结
  11. 我的 2020 总结:跌宕起伏
  12. 程序的内存分配----变量在可执行文件中的内存区分配
  13. [转载] 七龙珠第一部——第020话 修行的威力
  14. mysql 的 sql 语句的机读顺序
  15. Charles 导出所有request, response, cookie, 导出为HTTP Archive .har
  16. XX和OO(南阳oj1159)
  17. 不懂技术能做项目经理吗?
  18. 离线语音识别应用(windows和Android)
  19. IPV6邻居发现协议(NDP)
  20. [ Tensorflow学习之路 ] —— API:TF-Slim

热门文章

  1. 本周(12.23-12.29)半价电子书
  2. Can I use 前端兼容性自查工具
  3. python setup.py build develop_python setup.py build develop编译出错
  4. 【计算机网络】谢希仁笔记 应用层
  5. no resolver defined to resolve
  6. [学点经济]什么是SDR [the IMF's Special Drawing Rights (SDR) basket of currencies]
  7. 腾讯云离线语音识别sdk
  8. 华为云服务器系统备份,云服务器备份系统
  9. python_多点拟合曲线并计算曲率半径
  10. Jetson TK1学习(二)安装无线网卡