zoukankan      html  css  js  c++  java
  • Mysql 事务

    事务

        事务的本质就是延缓SQL语句对数据库的数据的更改

        现实中的事务,可能由多个步骤来完成,事务的成败,必须由多个步骤来同时决定。MySQL是解决现实的问题,现实中的事务成败,反应到MySQL中的也由多个步骤(SQL语句)组成,事务的成败就由多个SQL语句共同决定。

    示例:

    银行转账

        现实中的一件事:用户A向用户B转100

    MySQL中

        1、A帐户减少钱

        2、B帐户增加钱

    可能的结果:

        A帐户减少钱了,B帐户没有增加

        A帐户没有减少,B帐户增加了

        A帐户没减少,B帐户也没有增加

        A帐户减少,B账户增

    事务安全:

        事务由多条SQL组成,要么都成功,要么都失败。

    事务分类

    MySQL中的事务分两类:自动事务、手动事务

    自动事务

        默认的,每一条SQL语句都会立即对数据库产生更改。绝对大多数情况,都是单条SQL语句执行。

    手动事务

    查看事务设置

    show variables like 'autocommit';

    示例:

    说明:

        on表示自动提交,此处的提交,是DBMS收到并执行SQL后,自动对数据库中的数据产生更改。

    更改autocommit来禁止自动提交

    示例:

    手动事务

        延缓事务的自动提交

    start transaction;        开启事务

    commit;                    提交

        当使用start transaction开启的事务,使用commit后,事务就结束了,其后的sql都会自动提交(前提autocommit=1);

    示例:

    示例:

    rollback 【to 回滚点】

    示例:

     

    savepoint    设置回滚点

        由于事务中会有多条SQL,但是某一些sql的执行,就算事务中其后的sql没有成功,那么有也是有意义(需要对数据库进行更改),此时就可以使用回滚点来保存事务中的某个位置。

    示例:

     

    事务的原理:

    自动事务原理:

        

    手动事务原理:

    事务的特点:

    ACID

    一个事物是一体的不可拆分

    原子性Atomicity:事务中的所有的SQL被当成一个整体,即是整体就不可以再分,要么都成功,要么都失败。

    一致性Consistency:事务在执行的过程中,对数据库的没有影响

    隔离性Isolation:两个客户端中的事务执行时,数据互不影响。

    持久性Durability:事务一旦提交,那么影响就是永久的。

    锁:

  • 相关阅读:
    Java 9 揭秘(9. 打破模块封装)
    Java 9 揭秘(8. JDK 9重大改变)
    好书分享 ——《深度工作》
    Java 9 揭秘(7. 创建自定义运行时映像)
    Java 9 揭秘(6. 封装模块)
    如何更好地管理你的精力,时间和专注力实现最佳表现
    这是您一直期待的所有iOS 11功能的屏幕截图
    我为什么不敢也不想写自己的经验和想法?
    无聊? 现在你知道为什么了!
    Java 9 揭秘(5. 实现服务)
  • 原文地址:https://www.cnblogs.com/nyxd/p/5359778.html
Copyright © 2011-2022 走看看