mysql由浅入深探究(四)----mysql事务详解
- 什么是事务: 通俗的解释就是对数据库进行的一组完整的操作,这组完整的操作中包含一个或多个操作。解释的太low了,来点官方的:事务就是DBMS中执行的一个完整的逻辑单元,这个逻辑单元中包含一个或者多个操作。
- 事务的作用: 上面说了事务的定义,但不太能体现事务的重要性,其实事务是一个很重要的概念,我们经常会听到一些相关的名词: 回滚,隔离(当然这里只是说数据库的,其实这两个概念的含义更加广泛),这就是事务的作用。
- 回滚: 事务作为一个逻辑单元,具有回滚的作用。回滚就是说我们在进行处理事务的时候,我们能够对事务进行回滚,恢复到事务开始之前的状态。其本质是通过记录事务开始前状态来实现的,这个后面再说吧。
- 隔离: 隔离,顾名思义就是把这些逻辑单元给隔离起来,不让其他逻辑单元进行干扰。实际应用中我们会有多个线程同时对数据库进行操作,比如A在修改,B也在修改,如果不加以控制,很可能造成脏数据。
- 事务特性ACID:
- A: Atomicity原子性,怎么理解--就是只存在一个状态的性质,要么执行成功,要么执行失败,只可能是这两种情况,并且只能出现其中一种情况!
- C: Consistency一致性,一致性说的是数据库中的数据满足完整性约束。
- I: Isolation隔离性,隔离性的意思是同时存在两个事务的时候不能相互干扰。
- D: durability持久性,就是事务所做出的更改必须能持久化到硬盘,不至于轻易丢失。
- 上面已经介绍了事务的基本的性质,作用:扯了一堆理论知识,现在我们来点实战性的!!!
上面我们已经介绍了事务的概念,那么我们如何操作事务呢?操作的方式有很多,比如java中的jdbc,或者是shell都行!下面我们通过终端来学一下,首先我们应该知道一个概念叫自动提交,那么什么是自动提交呢?这个很好理解,就是在操作数据库时我们不必显示的进行事务提交,而由mysql自动替我们完成。
A. 查看mysql的提交方式:show variables like 'autocommit';能够查看数据库是否是自动提交的。
B. 设定mysql的自动提交方式: set autocommit=false;就可以设定mysql不自动提交了。
C. 自动提交pk手动提交:下面我们来试试自动提交和手动提交的差别:
- 自动提交:我们执行一条命令后我们就没有反悔的权利了!比如,银行的业务中,A向B转账100元,银行需要做的有两步,首先A银行卡中减去100元,B银行卡中增加100元,但是如果设置为自动提交,当第一步完成了银行服务器宕机了,那么完了,数据出现了问题。所以企业通常都会设置autocommit为false。
- 手动提交:
- 开启事务: 方式begin,start transaction,set autoCommit
- 提交事务: commit
- 回滚事务: rollback
- 事务实例: 举一个例子来说明事务:我们有这样一个员工表Baidu(name,age,salary);
下面我们对这个表进行操作,首先通过上述方法设置开启事务,插入一条数据,查看数据库,提交或者回滚(注意,这里我们在同一个终端进行操作,因为不同终端设计到事务的隔离性。我们下一节会学习)如下:
上面我们已经插入了一个记录,我们可以在本终端进行查看,
我们在这个终端可以发现已经插入成功了,但是如果此时进行rollback操作,再查看就会发现插入的数据消失了。如果提交,那么数据将会被持久化到数据库中。
D. 事务的原理: 上面的操作我们会发现,在未提交时我们可以对事务进行回滚,那么我们需要知道为什么能进行回滚呢?实际上mysql是通过日志的方式来进行回滚的,我们在会对事务内的操作进行日志记录,如果发生回滚现象,mysql将会读取日志信息进行redo(将已经执行成功但是没有持久化到硬盘中的数据进行持久化),用这样的办法来保证一致性。然后再将事务中没有提交的部分进行Undo,用此方法来保证原子性。
mysql由浅入深探究(四)----mysql事务详解的更多相关文章
- PHP mysql与mysqli事务详解
官方对PHP连接到MySQL数据库服务器的三种主要的API简介如下: http://php.net/manual/zh/mysqli.overview.php PHP mysql与mysqli事务详解 ...
- spring事务详解(四)测试验证
系列目录 spring事务详解(一)初探事务 spring事务详解(二)简单样例 spring事务详解(三)源码详解 spring事务详解(四)测试验证 spring事务详解(五)总结提高 一.引子 ...
- MySQL数据库的各种存储引擎详解
原文来自:MySQL数据库的各种存储引擎详解 MySQL有多种存储引擎,每种存储引擎有各自的优缺点,大家可以择优选择使用: MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB ...
- MySQL数据库使用mysqldump导出数据详解
mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等.接下来通过本文给大家介绍MySQL数 ...
- 【转】MySQL用户管理及SQL语句详解
[转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...
- mysql数据库分区功能及实例详解
分区听起来怎么感觉是硬盘呀,对没错除了硬盘可以分区数据库现在也支持分区了,分区可以解决大数据量的处理问题,下面一起来看一个mysql数据库分区功能及实例详解 一,什么是数据库分区 前段时间写过一篇 ...
- (转)MySQL性能调优my.cnf详解
MySQL性能调优my.cnf详解 https://blog.linuxeye.cn/379.html http://blog.csdn.net/orichisonic/article/details ...
- mysql数据库my.ini配置文件中文详解
mysql数据库my.ini配置文件中文详解 mysqld程序–目录和文件 basedir = path 使用给定目录作为根目录(安装目录). character-sets-dir = path 给出 ...
- MySQL的用户密码过期功能详解
MySQL的用户密码过期功能详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 先说明两个术语. Payment Ca ...
- MySql绿色版配置及使用详解
原文:MySql绿色版配置及使用详解 最近在做项目开发时用到了MySql数据库,在看了一些有关MySql的文章后,很快就上手使用了.在使用的过程中还是出现了一些问题,因为使用的是绿色免安装版的MySq ...
随机推荐
- cocos2d-js v3.1的坑
前几天因为要用到cc.pool,所以就换了v3.1版本,结果连生成apk的出错(cocos code ide), log显示为:error: relocation overflow in R_ARM_ ...
- 【题解】[P4178 Tree]
[题解]P4178 Tree 一道点分治模板好题 不知道是不是我见到的题目太少了,为什么这种题目都是暴力开值域的桶QAQ?? 问点对,考虑点分治吧.直接用值域树状数组开下来,统计的时候直接往树状数组里 ...
- python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法
在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object): def spam(self): print 'A.spam' class ...
- Gemini.Workflow 双子工作流入门教程二:定义流程:流程节点介绍
简介: Gemini.Workflow 双子工作流,是一套功能强大,使用简单的工作流,简称双子流,目前配套集成在Aries框架中. 下面介绍本篇教程:流程定义:流程节点属性. 流程节点: 左侧是节点工 ...
- Android 破解
一.反编译 默认你的电脑中完好的有java环境 1.下载 Android killer 链接: https://pan.baidu.com/s/1s6lfm8CbdU9ABYEOhdFWxA 提取码 ...
- linux日常开发使用命令整理
linux: 安装ssh-server:$ sudo apt-get install openssh-server 更新软件库:$ sudo apt-get update 启动ssh:$ sudo / ...
- java图形界面设计
1. 基本的java Frame操作. Java的图形界面的类主要包括AWT和Swing.在AWT中图形元素的父类为Component. 继承关系如下:Component->Cont ...
- Android蓝牙通讯【转】
本文转载自:http://blog.csdn.net/vnanyesheshou/article/details/51554852 随着可穿戴设备的流行,研究蓝牙是必不可少的一门技术了. 总结了下蓝牙 ...
- <J2EE学习笔记>关于Servlet的讲义
题外话:接触java又是半年之前的事情了,当初好好学了java却把cpp给忘了,到现在又把手里发热的cpp给放下重新捡起来java,究竟这两种OOP语言我能不能清晰分开记住呢 以下全部课件来自于同济大 ...
- HDU 4405 Aeroplane chess:期望dp
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4405 题意: 你在下简化版飞行棋... 棋盘为一个线段,长度为n. 上面有m对传送门,可以直接将你从a ...