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 ...
随机推荐
- JavaEE详解
本文主要讲JavaEE相关知识. 一 JavaEE 简介 JavaEE是很多技术的合集.提供了一套做B/S结构应用时,可能遇到问题的一套解决方案. 例如:处理客服端请求的servlet技术方案.处理数 ...
- python自动化运维六:paramiko
paramiko是基于python实现的SSH2远程安全连接,支持认证以及密钥方式,可以实现远程命令执行,文件传输,中间SSH代理等功能.也就是采用SSH的方式进行远程访问.SSH登陆的方式可以参考之 ...
- vector缩减容量
在C++标准库容器vector的容量是不会自动的缩减的,也就是说删除元素操作,其引用.指针.迭代器也会继续有效.那么当在一个较大的vector中删除了大量的元素之后,其实际的size比较小,而其cap ...
- STM32 Flash Download failed
笔者使用Keil开发环境对STM32L Discovery进行开发,更新一次firmware后就不能连接目标板了,报错Internal command error Flash download fai ...
- ActiveMQ之点对点使用
package com.toov5.producer; import javax.jms.Connection; import javax.jms.JMSException; import javax ...
- c语言学习的第13天1
#include <stdio.h> int main(void) { int a[5]={1,2,3,4,5}; printf("%#x, %#x\n",a,& ...
- insert …select …带来的死锁问题
mysql中 insert …select …带来的问题 当使用insert...select...进行记录的插入时,如果select的表是innodb类型的,不论insert的表是什么类型的表,都会 ...
- mac快速正确的安装 Ruby, Rails 运行环境
Mac OS X 任意 Linux 发行版本(Ubuntu,CentOS, Redhat, ArchLinux ...) 强烈新手使用 Ubuntu 省掉不必要的麻烦! 以下代码区域,带有 $ 打头的 ...
- Queue Explorer过期处理
Queue Explorer是收费软件,用一段时间后会显示过期界面无法使用, 我们可以删除注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Cogin\Queue ...
- Go丨语言对数据库操作报错 panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.
panic: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine ac ...