zoukankan      html  css  js  c++  java
  • MySQL基础(4):事务控制

    查看存储引擎:show engines;

    InnoDB支持事务,MyISAMMEMORY不支持事务

    1、事务的特性:(ACID

      原子性:一个事务不可再分割,要么都执行要么都不执行。

      一致性:一个事务执行会使数据从一个一致状态切换到另一个一致状态

      隔离性:一个事务的执行不受其他事务的干扰(需要通过设置隔离级别)

      持久性:一个事务一但提交,则会永远改变数据库数据

    2、事务的创建

      没有结束事务前,相当于只是保留在内存。

    步骤1:开启事务
        set autocommit=0;
        【start transaction;】
    步骤2:事务中的语句;
    步骤3:结束事务
        commit;
        rollback;

    3、常见的并发问题

      脏读:一事务T1读取了被T2更新但还未提交的字段后,若T2回滚,T1读取的内容就是临时且无效的。

           设置read commited后,即使T2更新了但未提交,TI读的还是更新前的数据。

      不可重复度:一事务T1读取一字段后,T2更新了该字段后,T1再读取时两次结果不一样。

           设置repeatable read后,即使在T1执行期间T2修改了字段,T1T2修改前后读取的两次结果一样,读取的都是T2修改前的结果,T1提交后再查询才会得到最新的数据。

      幻读:一个事务T1操作表时,另一个事务T2在这时插入或删除数据,会导致T1修改的时候多了或少了几条数据。

           设置serializable后,T1在表里只有两条数据的时候准备进行更新,这时T2插入了1条数据并提交事务,这时T1影响的仍是两条数据,T2会以阻塞的方式,等T1执行完才能插入。

    4、隔离级别

      隔离级别:隔离级别越高,数据一致性越好,但并发性越弱

       

      Mysql默认级别是REPEATABLE READ

      Oracle只支持READ COMMITEDSERIALIZABLE,默认是READ COMMITTED

    查询当前隔离级别:
        select @@tx_isolation;
    设置当前mysql连接/ 全局的隔离级别:
        set session/global transaction isolation level READ COMMITTED;

    5savepoint结合rollback使用

       

  • 相关阅读:
    使用库项目实现Android程序代码的复用 java程序员
    编译触摸tslib出错:libtool: link: only absolute runpaths are allowed java程序员
    Linux下的TFTP软件的安装设置(TQ210)ubuntu11.10 java程序员
    拥有超过1200个PNG格式图标的免费图标集 Cosmo Mini java程序员
    Android Develop Training中文翻译06《Starting Another Activity》 java程序员
    周记二
    周记三
    周记
    周记
    周记
  • 原文地址:https://www.cnblogs.com/zjxiang/p/9114702.html
Copyright © 2011-2022 走看看