zoukankan      html  css  js  c++  java
  • MySql事务及隔离级别

    在数据库中,所谓事务是指作为单个逻辑工作单元执行的一系列操作。

    事务的操作:
      先定义开始一个事务,然后对数据作修改操作,
        这时如果提交(COMMIT),这些修改就永久地保存下来
        如果回退(ROLLBACK),数据库管理系统将放弃您所作的所有修改而回到开始事务时的状态。
     
    在JDBC中,事务默认是自动提交的,每次执行一个 SQL 语句时,如果执行成功,就会向数据库自动提交,而不能回滚
     
    为了让多个 SQL 语句作为一个事务执行:
      •调用 Connection 对象的 setAutoCommit(false); 以取消自动提交事务
      •在所有的 SQL 语句都成功执行后,调用 commit(); 方法提交事务
      •在出现异常时,调用 rollback(); 方法回滚事务
     

    命令行实现事务处理

      1  查看提交模式
        select @@autocommit
      2、用begin,rollback,commit来实现     
        begin              //开始一个事务            
        rollback          //事务回滚           
        commit          //提交事务
      3、 直接用set来改变mysql的自动提交模式

            MYSQL默认是自动提交的,也就是你提交一个QUERY,它就直接执行
        set autocommit =0     禁止自动提交
        set autocommit =1    开启自动提交,   来实现事务的处理。
          *  当你用 set autocommit =0 的时候,你以后所有的SQL都将做为事务处理,直到你用commit确认或rollback结束。

             *   注意:当你结束这个事务的同时也开启了个新的事务

    事务隔离级别(transaction isolation levels):隔离级别就是对事务并发控制的四个等级。分为

        1  串行化(SERIALIZABLE)

        2  可重复读(REPEATABLE READ)

        3  读已提交(READ COMMITED)

        4  读未提交(READ UNCOMMITED)   

    1、mysql默认的隔离级别为Repeatable_Read

    2、sqlserver 默认的隔离级别为Read Commited

    3、oracle数据库支持READ COMMITTED和SERIALIZABLE两种事务隔离性级别,不支持READ UNCOMMITTED和REPEATABLE READ这两种隔离性级别,Oracle数据库默认使用的事务隔离性级别却是READ COMMITTED.

    设置当前mysql.exe的隔离级别
    隔离级需要使用SET 命令来设定其语法如下:
    SET  TRANSACTION  ISOLATION    LEVEL   隔离级别

         隔离级别  分为四种:
     READ UNCOMMITTED

            |  READ COMMITTED

           | REPEATABLE READ
                               | SERIALIZABLE

    查询隔离级别

              select @@tx_isolation

    设置数据库系统的全局的隔离级别

         隔离级需要使用SET 命令来设定其语法如下:
     SET  global  TRANSACTION  ISOLATION    LEVEL   隔离级别

    对于同时运行的多个事务,当这些事务访问数据库相同的数据时,如果没有采取必要的隔离机制,就会产生并发问题.

      脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。

      不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。换句话说就是,后续读取可以读到另一事务已提交的更新数据。

      可重复读:在同一事务中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据。

      幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。

  • 相关阅读:
    [loj6039]「雅礼集训 2017 Day5」珠宝 dp+决策单调性+分治
    [loj6038]「雅礼集训 2017 Day5」远行 lct+并查集
    [BZOJ4945][Noi2017]游戏 2-sat
    [BZOJ4942][Noi2017]整数 线段树+压位
    [BZOJ3672][Noi2014]购票 斜率优化+点分治+cdq分治
    12.17模拟赛
    [BZOJ3150][Ctsc2013]猴子 期望dp+高斯消元
    杜教筛
    Swagger展示枚举类型参数
    spring boot 如何映射json格式请求中的枚举值
  • 原文地址:https://www.cnblogs.com/liuwt365/p/4098132.html
Copyright © 2011-2022 走看看