zoukankan      html  css  js  c++  java
  • MySQL学习之基础篇09-事务

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

    举个例子:

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

    银行转账:

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

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

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

  • 相关阅读:
    【Spring学习】Spring的源码解析之路 ——【step1】基础环境配置 + IDEA快捷键整理
    【Spring学习】Spring的源码解析之路
    【Android端】【日志收集上报SDK相关内容测试的方案梳理总结】
    【codelife 阿里技术文章分享——读后感】
    【python深入】map/reduce/lambda 内置函数的使用
    【python深入】单例模式
    【python深入】装饰器理解及使用
    【python深入】collections-Counter使用总结
    【python深入】dict和list实现排序:sorted()和lambda的使用
    选择排序
  • 原文地址:https://www.cnblogs.com/wanghaoyu666/p/11301640.html
Copyright © 2011-2022 走看看