• 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块,那么这个操作就不能实现

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

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

  • 相关阅读:
    Visual Studio 2010 SP1 中文升级补丁ISO完整版下载 (含多国语言)
    通过修改Host实现chrome同步
    附加数据库出现 无法打开物理文件 操作系统错误 5:拒绝访问 SQL
    配置Oracle遇到问题<一>
    GDI+中发生一般性错误的解决办法(转载)
    当VS和Flash builder同时运行时
    抛弃jQuery 深入原生的JavaScript
    Android SDK下载和更新慢或失败的解决办法
    Android 学习笔记 文本文件的读写操作
    Android Camera相机功能实现 拍照并保存图片
  • 原文地址:https://www.cnblogs.com/abc23/p/9428025.html
Copyright © 2020-2023  润新知