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

举个例子:

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

银行转账:

张三想给李四转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机那边的情况:

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

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

最新文章

  1. C# 云端-让http自动跳转到https链接
  2. jquery插件——检测DOM元素是否在浏览器可视范围之内
  3. listview的ViewHolder优化
  4. Java集合类学习笔记(各种Map实现类的性能分析)
  5. 转载:Java的接口及实例
  6. Divide and conquer:Telephone Lines(POJ 3662)
  7. 白话学习MVC(九)View的呈现一
  8. [ASP.NET MVC] ASP.NET Identity学习笔记 - 原始码下载、ID型别差异
  9. 几个linux命令
  10. 免费vpn
  11. Runtime运行时学习(一)
  12. linux+apache+mod_Jk+tomcat实现tomcat集群
  13. 2、第2节课html教程客户端控件/css第一课/20150917
  14. Android系统五大布局详解Layout
  15. asp.net MVC4 +MVCpager
  16. python安装第三方库的三种方法
  17. Mark一下~
  18. Java_04循环结构
  19. HDFS基本架构及概念介绍
  20. EOS生产区块:解析插件producer_plugin

热门文章

  1. Oracle系列二 基本的SQL SELECT语句
  2. Visual Studio 2017 vcvarsall.bat 环境配置对应关系
  3. KAFKA:如何做到1秒发布百万级条消息
  4. CDH集群手动导入scm库
  5. 西门子PLC1200内使用SCL实现简化版PID算法
  6. 04 Mybatis 框架的环境搭建及入门案例
  7. 你应该掌握linux中Bash命令的一些快捷方式
  8. Python-16-继承、封装、多态
  9. [LOJ #2833]「JOISC 2018 Day 1」帐篷
  10. redis订阅与发布系统