事务:Transaction详解
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详解的更多相关文章
- MySQL——事务(Transaction)详解
原文:https://blog.csdn.net/w_linux/article/details/79666086
- Hibernate Session & Transaction详解
Hibernate Session & Transaction详解 HIbernate中的Session Session是JAVA应用程序和Hibernate进行交互时使用的主要接口,它也是持 ...
- (转)Spring事务管理详解
背景:之前一直在学习数据库中的相关事务,而忽略了spring中的事务配置,在阿里面试时候基本是惨败,这里做一个总结. 可能是最漂亮的Spring事务管理详解 https://github.com/Sn ...
- 【Spring】——声明式事务配置详解
项目中用到了spring的事务: @Transactional(rollbackFor = Exception.class, transactionManager = "zebraTrans ...
- spring事务管理(详解和实例)
原文地址: 参考地址:https://blog.csdn.net/yuanlaishini2010/article/details/45792069 写这篇博客之前我首先读了<Spring in ...
- 可能是最漂亮的Spring事务管理详解
Java面试通关手册(Java学习指南):https://github.com/Snailclimb/Java_Guide 微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么 ...
- 可能是最漂亮的Spring事务管理详解 专题
微信阅读地址链接:可能是最漂亮的Spring事务管理详解 事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允 ...
- 最漂亮的Spring事务管理详解
SnailClimb 2018年05月21日阅读 7245 可能是最漂亮的Spring事务管理详解 Java面试通关手册(Java学习指南):github.com/Snailclimb/- 微信阅读地 ...
- Net Core中数据库事务隔离详解——以Dapper和Mysql为例
Net Core中数据库事务隔离详解--以Dapper和Mysql为例 事务隔离级别 准备工作 Read uncommitted 读未提交 Read committed 读取提交内容 Repeatab ...
- Redis的事务功能详解
Redis的事务功能详解 MULTI.EXEC.DISCARD和WATCH命令是Redis事务功能的基础.Redis事务允许在一次单独的步骤中执行一组命令,并且可以保证如下两个重要事项: >Re ...
随机推荐
- 安装DHCP到CentOS(YUM)
运行环境 系统版本:CentOS Linux release 7.3.1611 (Core) 软件版本:DHCP-x 硬件要求:无 安装过程 1.安装YUM源,由EPEL提供 [root@localh ...
- 04、extern引用全局变量
这里强调一点就是关extern的声明: extern在声明中最主要的作用就是告诉编译器别的文件引用了全局变量XXXX. 举例: 有一个工程名字叫 Project1. Project1下面有两个.cpp ...
- php如何获取单选复选和选择框的值
1.很久没有写基础的东西了复习一下(往往简单的东西才复杂) <body> 选择语句 <form action="demo.php" method="po ...
- laravel框架api路由
Route::group(['namespace' => 'Api'], function (){ Route::any('send','SmsController@send'); }); gr ...
- Linux下用Bash语言实现判断素数的功能
题目链接: 题目描述 写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息. 输入 一个数 输出 如果是素数输出prime 如果不是输出not prime 样例输入 97 样例输出 pri ...
- K3/cloud执行计划插件示例
public class AutoCheckInventory : IScheduleService { /// <summary> /// 实际运行的Run 方法 ...
- AntDesign(React)学习-15 组件定义、connect、interface
虽然常用的编码用一种即可,但是看别人文档或者示例时,有的写法不熟悉的话看着很不习惯,整理几种实现同一功能的不同写法 1.Dva Connect与@Connect import React, { Pro ...
- Docker最全教程——从理论到实战(十一)
前言 容器教程的路还很长,笔者尽量根据实践来不断地完善.由于在编写的过程中还会有完善和补充,后续可能会以番外来补充. 接下来会分享TeamCity.树莓派等内容,节奏可能会有点跳脱. 另外,长沙.NE ...
- sort函数的用法(C++排序库函数的调用)
对数组进行排序,在c++中有库函数帮我们实现,这们就不需要我们自己来编程进行排序了. (一)为什么要用c++标准库里的排序函数 Sort()函数是c++一种排序方法之一,学会了这种方法也打消我学习c+ ...
- import 与 from...import