zoukankan      html  css  js  c++  java
  • mysql中set autocommit=0与start transaction区别

    set autocommit=0指事务非自动提交,自此句执行以后,每个SQL语句或者语句块所在的事务都需要显示"commit"才能提交事务。

    1、不管autocommit 是1还是0 
         START TRANSACTION 后,只有当commit数据才会生效,ROLLBACK后就会回滚。

    2、当autocommit 为 0 时
        不管有没有START TRANSACTION。
        只有当commit数据才会生效,ROLLBACK后就会回滚。

    3、如果autocommit 为1 ,并且没有START TRANSACTION 。
        调用ROLLBACK是没有用的。即便设置了SAVEPOINT。

    回滚成功

    set autocommit =1;
    
    DELIMITER $$
    DROP PROCEDURE IF EXISTS  mmmm $$  
    CREATE DEFINER=`tms_admin`@`%` PROCEDURE `mmmm`()
    BEGIN
    
    
          
        DECLARE t_error INTEGER DEFAULT 0;
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND  SET t_error=1;
        
    
    
        START TRANSACTION;
        SAVEPOINT p1;  
    
                update t_user set instance_seq_id = 'tt00006';
                update t_user set instance_seq_id000 = 'tt00007';
    
    
                IF t_error = 1 THEN 
                    ROLLBACK to p1;
                ELSE 
                    COMMIT; 
                END IF;
    
    END$$
    DELIMITER ;
    
    CALL `tms_inst_tt00003`.`mmmm`();
    set autocommit =0;
    
    DELIMITER $$
    DROP PROCEDURE IF EXISTS  mmmm $$  
    CREATE DEFINER=`tms_admin`@`%` PROCEDURE `mmmm`()
    BEGIN
    
    
          
        DECLARE t_error INTEGER DEFAULT 0;
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND  SET t_error=1;
        
    
    
        START TRANSACTION;
        SAVEPOINT p1;  
    
                update t_user set instance_seq_id = 'tt00006';
                update t_user set instance_seq_id000 = 'tt00007';
    
    
                IF t_error = 1 THEN 
                    ROLLBACK to p1;
                ELSE 
                    COMMIT; 
                END IF;
    
    END$$
    DELIMITER ;
    
    CALL `tms_inst_tt00003`.`mmmm`();

    回滚成功

    set autocommit =0;
    
    DELIMITER $$
    DROP PROCEDURE IF EXISTS  mmmm $$  
    CREATE DEFINER=`tms_admin`@`%` PROCEDURE `mmmm`()
    BEGIN
    
    
          
        DECLARE t_error INTEGER DEFAULT 0;
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND  SET t_error=1;
    
        SAVEPOINT p1;  
    
                update t_user set instance_seq_id = 'tt00006';
                update t_user set instance_seq_id000 = 'tt00007';
    
    
                IF t_error = 1 THEN 
                    ROLLBACK to p1;
                ELSE 
                    COMMIT; 
                END IF;
    
    END$$
    DELIMITER ;

    回滚成功

  • 相关阅读:
    重写Nacos服务发现逻辑动态修改远程服务IP地址
    手撸一个SpringBoot配置中心实现配置动态刷新
    使用CompletableFuture实现多个异步任务并行完成后合并结果
    SpringBoot实现Flyway的Callback回调钩子
    Java实现相似结构表算法
    使用Druid解析SQL实现血缘关系计算
    记一次解决RestTemplate和HttpClient请求结果乱码的问题
    double转json格式化添加自定义注解
    了解23种设计模式
    BigDecimal四舍五入
  • 原文地址:https://www.cnblogs.com/lhp2012/p/5315928.html
Copyright © 2011-2022 走看看