我们在建表的时候通常会在最后声明引擎类型,这次我们就来看看存储引擎都有哪些:

举个例子:

---------------------------

银行转账:

张三想给李四转500元钱:

张三-500

李四+500

这两步必须都完成,转账才完成

---------------------------

像这种,2步或N步必须都完成,从逻辑上讲,是一个‘原子操作’,即要么成功,要么都不成功

那么如何保障这种特性?

答:事务

我们先建两张不同引擎的表,分别是b1,b2:

插入数据:

我们来体现innodb引擎具有的事务特性:

开启事务,体现事务的原子特性:

start transaction;

先给张三减500:

update b2 set money=money-500 where uname='zhangsan';

然后我们故意写错语句来模拟转账时出现网络故障等失败场景:

转账必须一个-500,一个+500,这样才成立,那么只有一个-500,另一个+500是失败的操作,那么我们就要进行回滚:

rollback;

事务有四种特性,上面我们演示的是原子性,它还有一致性,隔离性,永久性;以下知识摘自百度百科:

原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

持久性(durability)。持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

持久性:

是指事务一旦完成,无法撤销

事务不能撤销,但确实出现了一次错误的交易,应该怎么办?

答:只能再做一次“补偿性事务”

接下来我们演示它的隔离性:

还是转账操作,我们用黑色模拟柜台,用红色来模拟ATM机

让李四给张三转500,(那么应该就是张三的钱+500,李四的钱-500.)

我们先给张三+500:

我们可以看到在柜台这边张三的钱已经加了500,那么看看ATM机那边的情况:

我们可以看到这边没有任何变化;

然后让李四-500:

可以看到ATM机这边还是没有任何变化。

然后我们结束事务:

这时我们再看ATM机那边的情况:

可以看得到这边的钱数目终于发生了变化。

以上就是我简单的为大家演示的事务的隔离性。

MySQL学习之基础篇09-事务的更多相关文章

  1. mysql学习之基础篇01

    大概在一周前看了燕十八老师讲解的mysql数据库视频,也跟着学了一周,我就想把我这一周所学的知识跟大家分享一下:因为是第一次写博客,所以可能会写的很烂,请大家多多包涵.文章中有不对的地方还请大家指出来 ...

  2. mysql学习之基础篇08 UTF8编码

    这次我们来说一下在Mysql中的编码问题: 我们知道应用于计算机的最早的字符集是ASCII,它所组成的编码是ASCII编码:由于对于其他国家来说它所容纳的字符个数比较少,后来就出现了ANSI字符集,它 ...

  3. mysql学习之基础篇05

    mysql中的统计函数: 1. 查询商品价格中最高的价格: select max(shop_price) from goods; 2. 查询商品价格中最低的价格: select min(shop_pr ...

  4. mysql学习之基础篇04

    五种基本子句查询 查询是mysql中最重要的一环,我们今天就来说一下select的五种子句中的where条件查询: 首先我们先建立一张商品表:goods 由于商品数目太多,我就不一一列举了. 在这里我 ...

  5. mysql学习之基础篇03

    我们今天来进行建表的基本操作: 首先要建表就要了解列类型,因为建表就是声明列的过程,列声明完成了,表也就建好了. mysql中列分为三大类: 一.数值型 数值型又分为整型和浮点型两种. 先来看整型: ...

  6. mysql学习之基础篇07

    视图:view 在查询的时候我们经常把查询到的结果当成一张临时表来看,其实view就可以看成一张虚拟表,是表通过某种运算得到的投影 那么如何创建视图?创建视图需要指定视图的列名和列类型吗? 答:不用, ...

  7. mysql学习之基础篇06

    子查询:又分为where型子查询,from型子查询,exists型子查询这三类. where型子查询:指把内层查询的结果作为外层查询的比较条件: 举个例子: 我们想查出goods_id最大的商品,要求 ...

  8. mysql学习之基础篇02

    我们来说一下表的增删改查的基本语法: 首先建立一个简单的薪资表: create table salary(id int primary key auto_increment,sname varchar ...

  9. 数据库MySQL学习笔记高级篇

    数据库MySQL学习笔记高级篇 写在前面 学习链接:数据库 MySQL 视频教程全集 1. mysql的架构介绍 mysql简介 概述 高级Mysql 完整的mysql优化需要很深的功底,大公司甚至有 ...

随机推荐

  1. 012-Shell 提示确认(Y / N,YES / NO)

    例1:确认提示(一次) 这个示例代码将为确认提示一次,如果你给输入错误,程序会以状态1退出.这个例子将只接受Y或N或YES或NO(不区分大小写). #!/bin/bash read -r -p &qu ...

  2. Jmeter获取 json字符的另外一种写法

    在jmeter使用过程中,我们经常会看到接口返回数据类型为application/json,也就时我们常说的json格式. 而在功能测试时,我们经常会要对它的结果进行断言,确认结果是否与预期一致,有时 ...

  3. OpenStack Neutron单网卡桥接模式访问外网

    环境配置: * Exsi一台 * Exsi创建的单网卡虚拟机一台 * Ubuntu 14LTS 64位操作系统 * OpenStack Liberty版本 * 使用Neutron网络而非Nova网络 ...

  4. K8S+GitLab+.net core-自动化分布式部署-1

    K8S+GitLab-自动化分布式部署ASP.NET Core(一) 部署环境 一.部署流程介绍 开发人员通过Git上传asp.net core 项目到Gilab,并编写好.gitlab-ci.yml ...

  5. java的byte[]与String相互转换

    String转byte[] byte[] sInput = new byte[0]; try { // 可以指定编码,默认也只UTF-8 sInput = "这是内容".getBy ...

  6. linux全面详细转载文章

    在网上发现了一位大佬写的linux各种命令.系统.配置等的详细解析,在此转载保留以便学习! 骏马金龙https://www.cnblogs.com/f-ck-need-u/p/7048359.html

  7. xorm -Exist方法实例

    判断某个记录是否存在可以使用Exist, 相比Get,Exist性能更好. package main import ( "fmt" _ "github.com/go-sq ...

  8. linux maven 安装

    1.使用wget命令下载maven安装包 wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.2/binaries/a ...

  9. Python3基础语法(20190617)

    字符串 字符串是以单引号'或双引号"括起来的任意文本,比如'abc',"xyz"等等.请注意,''或""本身只是一种表示方式,不是字符串的一部分,因此 ...

  10. 通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息

    原文:通过 AppSwitch 禁用 WPF 内置的触摸让 WPF 程序可以处理 Windows 触摸消息 WPF 框架自己实现了一套触摸机制,但同一窗口只能支持一套触摸机制,于是这会禁用系统的触摸消 ...