1、事务概念:
      一组sql语句操作单元,组内所有SQL语句完成一个业务,如果整组成功:意味着全部SQL都实现;如果其中任何一个失败,意味着整个操作都失败。失败,意味着整个过程都是没有意义的。应该是数据库回到操作前的初始状态。这种特性,就叫“事务”。

2、为什么要存在事务?
   1)失败后,可以回到开始位置
  2)没都成功之前,别的用户(进程,会话)是不能看到操作内的数据修改的

3、事务4大特征ACID:

  1)原子性[atomicity]:功能不可再分,要么全部成功,要么全部失败
  2)一致性[consistency]:事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败
  3)隔离性[isolation]:事务A和事务B之间具有隔离性
  4)持久性[durability]:是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

3、相关概念:

【SQL执行过程】1)执行阶段   2)将执行结果,提交到数据库的阶段

其中我们的事务日志,就是保存执行阶段的结果,如果用于选择提交,则才将执行的结果提交到数据库。

默认的执行方式叫做,自动提交。执行完毕,自动完成提交工作。如果你想要所有SQL语句全部成功,就需要关闭自动提交功能。
“自动提交”:存在一个系统变量,Autocommit可以对自动提交进行设置。

4、事务操作:

方法一:

show variables like 'autocommit'; #查看自动提交是否开启
set autocommit=1(开启自动提交)
set autocommit=0(关闭自动提交),关闭后,再次执行相应的更新语句发现,在其它连接(会话)中查看数据,没有发生变化,因为结果没有提交。

方法二(提倡):

1)开启事务:start transaction; 关闭自动提交。如果事务结束了,成功或者失败,都会将自动提交机制,回到start时的状态。
2)成功-->提交:commit;
3)失败-->回滚:rollback;

5、重要限制:

  存储引擎必须是innodb才能生效。

6、个人理解:

    把事务看作一个容器,暂时在该容器(start transaction)中操作(增删改查),如果不出错,就立即更新数据库(commit),即公开可见。如果出错,就立即回滚数据库(rollback),即恢复初始状态,数据库更新停止。

可以高效地防止错误的发生,快速恢复至初始化状态。

7、实验测试:

步骤一:新建两张表,一张是班费表(class),另一张是学生个人钱财表(stu)。

步骤二:开启事务进行数据操作,注意同时开两个数据库窗口,方便我们查看实验效果

窗口1:

此时,可以查看到窗口1中的数据已经更新(我的理解是仅仅是在“事务容器”内更新完成),但是还没有上传至数据库真正更新。在另一个窗口中可见数据库并没有更新成功:

此时,必须在窗口1中的事务中输入commit命令,才能完成真正意义上的更新,无论开多少个窗口,都可以看到数据更新的内容:

如果在“事务容器”中更新数据时出现问题,就需要使用rollback命令立即恢复到初始状态。

事务:Transaction详解的更多相关文章

  1. MySQL——事务(Transaction)详解

    原文:https://blog.csdn.net/w_linux/article/details/79666086

  2. Hibernate Session & Transaction详解

    Hibernate Session & Transaction详解 HIbernate中的Session Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持 ...

  3. (转)Spring事务管理详解

    背景:之前一直在学习数据库中的相关事务,而忽略了spring中的事务配置,在阿里面试时候基本是惨败,这里做一个总结. 可能是最漂亮的Spring事务管理详解 https://github.com/Sn ...

  4. 【Spring】——声明式事务配置详解

    项目中用到了spring的事务: @Transactional(rollbackFor = Exception.class, transactionManager = "zebraTrans ...

  5. spring事务管理(详解和实例)

    原文地址: 参考地址:https://blog.csdn.net/yuanlaishini2010/article/details/45792069 写这篇博客之前我首先读了<Spring in ...

  6. 可能是最漂亮的Spring事务管理详解

    Java面试通关手册(Java学习指南):https://github.com/Snailclimb/Java_Guide 微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么 ...

  7. 可能是最漂亮的Spring事务管理详解 专题

    微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允 ...

  8. 最漂亮的Spring事务管理详解

    SnailClimb 2018年05月21日阅读 7245 可能是最漂亮的Spring事务管理详解 Java面试通关手册(Java学习指南):github.com/Snailclimb/- 微信阅读地 ...

  9. Net Core中数据库事务隔离详解——以Dapper和Mysql为例

    Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...

  10. Redis的事务功能详解

    Redis的事务功能详解 MULTI.EXEC.DISCARD和WATCH命令是Redis事务功能的基础.Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项: >Re ...

随机推荐

  1. Cloud开发动态列的简单账表

    业务场景:客户需要根据过滤条件的不同显示不同的列.如下方式可以实现动态的列名. using System;using System.Collections.Generic;using System.L ...

  2. HTML5,从零开始

    一.网页的组成部分 <!DOCTYPE html> <html> <head> <title>这是标题</title> <meta c ...

  3. python3运行时候报错集锦:读取文件报错

    1.关于读取文件报错: 命令执行到cf.read(cfpath),出现如下报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa0 in po ...

  4. [USACO09JAN]Total Flow【网络流】

    Farmer John always wants his cows to have enough water and thus has made a map of the N (1 <= N & ...

  5. C++——标准模板库

    1.泛型程序设计:将程序尽可能写的通用,将算法从特定的数据结构中抽象出来,成为通用的:C++模板为泛型程序设计奠定了关键的基础:STL是泛型程序设计的一个范例:容器container.迭代器itera ...

  6. Alan Walker MV 合辑01 by defender

    Alan Walker MV合辑  出来啦! 百度网盘下载地址: 链接:https://pan.baidu.com/s/10WSool70XBe_8tJOae8V-w 提取码:uckq 地址查看 Mi ...

  7. 占位 RK

    占位 RK include: RK403 RK404

  8. 让Surface Shader不受光照的明暗影响

    直接上码 Shader "Custom/3DVideo" { Properties { _Color (,,,) _MainTex ("Albedo (RGB)" ...

  9. 白面系列 mongoDB

    mongoDB和redis一样,都是noSQL技术之一. redis是Key-Value存储,mongoDB是文档存储. 文档存储一般用类似json的格式存储,存储的内容是文档型的.文档是一组键值(k ...

  10. springboot静态资源

    https://blog.csdn.net/yali_aini/article/details/83213695 https://blog.csdn.net/sihai12345/article/de ...