• 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 ;
    复制代码

    回滚成功

  • 相关阅读:
    转: MySQL 赋予用户权限(grant %-远程和localhost-本地区别)
    修改Apache的最大连接数
    正向代理与反向代理的区别【Nginx读书笔记】
    mysql加单引号和不加单引号的性能比较
    mysql保存数据提示1366 Incorrect string value: ‘xF0x9Fx98x8AxF0x9F…’ 解决
    Mysql外键约束设置使用方法
    MYSQL分库分表和不停机更改表结构
    Hive SQL 常用日期
    CountDownLatch学习
    Exchanger学习
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/9584110.html
Copyright © 2020-2023  润新知