zoukankan      html  css  js  c++  java
  • MySql cmd下的学习笔记 —— 引擎和事务(engine,transaction)

    engine 引擎就是MySQL存储数据的不同方式

    myisam 插入速度快 支持全文索引

    innoDB 插入速度慢 支持事务安全

    假设两人同时购买火车票,两人同时看到只有一张火车票,几乎同时下单

    在银行转账时,张三转李四500元,两边必须都完成,转账才算完成,

    张三少钱和李四多钱必须一致的,这个两个操作必须同时成功或同时失败,不能一个成功,而另一个失败

    需要用到事务

    建立两张完全一样的表,但是引擎不一样

     各插入两条数据:

    mysql> insert into a1
        -> values
        -> ('zhangsan', 2000),
        -> ()
        ->
        -> c
    mysql> insert into a1
        -> values
        -> ('张三', 3000),
        -> ('李四', 2000);
    Query OK, 2 rows affected (0.00 sec)
    Records: 2  Duplicates: 0  Warnings: 0
    
    mysql> insert into a2
        -> values
        -> ('张三', 3000),
        -> ('李四', 2000);
    Query OK, 2 rows affected (0.07 sec)
    Records: 2  Duplicates: 0  Warnings: 0

    开启事务:

    在两个窗口同时打开a2表(蓝色为第二个窗口)

     

     当两步都完成时,这个事物才算完成

    提交整个事务

     

    在另一个窗口下可以也可以显示出结果

    (之前的操作并没有任何特殊的地方,只是‘张三’转了1000给‘李四’,下面的操作才说明了

    事务的一个特性【原子性】)

    我们第二次再开启事务

    这次要再给李四1000元

    但因为网络故障,李四没收到钱,整体的转账操作,从逻辑上讲,张三白少了1000元

    但张三的钱已经少了1000

     

    那么‘张三’的钱还能不能回来呢?

    答:可以!!!

    张三的钱就《回滚》了

     用黑色窗口和蓝色窗口来说明事务的隔离性

     开启事务

    在存进1000元时,如果在不按确定时,把刚存的钱取出,再按取消键,那么自己的刚存的钱是否会退出来呢

     

    可以看出来,张三的钱并没有增加,说明了只要事务没有结束,从其他的方式询问该表,

    数据是不会变的

     

    只有当事务完成后,用其他方式访问该数据库才会显示结果

     

    但在a1表实现刚才的操作就不会有效果(a1 engine myisam |  a2 engine innodb)  

     可以看出,即使a1表没有停止事务,a1表增加的钱在其他窗口也能看见

     事务的特性

    原子性:2步或n步,要不都成功,要不都不成功

    一致性:在转钱时,一个人加500, 而另一边没500块,那么这个操作就不能实现

    隔离性:事务结束前,每一步带来的影响,别人都看不见

    持久性:事务一旦完成,无法撤销

  • 相关阅读:
    计算机语言的学习之道
    单麦克风远场语音降噪解决方案
    ESP8266 SPI 开发之软件驱动代码分析
    ESP8266 SPI 开发之软硬基础分析
    蓝牙5.0协议及下载地址
    python中往json中添加文件的方法
    Python isinstance() 函数含义及用法解析
    从一线方案商的角度来看高通QCC3020芯片
    Ubuntu18.04声卡配置问题解决
    python 音频通道分离的源码实现
  • 原文地址:https://www.cnblogs.com/abc23/p/9428025.html
Copyright © 2011-2022 走看看