zoukankan      html  css  js  c++  java
  • MySql 事务+异常处理+异常抛出

    -- 测试用表
    -- innodb 支持事务
    CREATE TABLE `tb_test` (
      `id` INT(11) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(50) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8;
    -- 测试用储存过程
    -- 通过插入相同的主键和插入NULL到非空字段中制造异常
    CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_test`()
    BEGIN
        -- 如果出现执行异常则结束后继的执行,并执行begin-end中的处理
        DECLARE EXIT HANDLER FOR SQLEXCEPTION 
        BEGIN
            -- 回滚事务
            ROLLBACK;
            -- 获取错误信息
            GET DIAGNOSTICS CONDITION 1 @p1=RETURNED_SQLSTATE,@p2= MESSAGE_TEXT;  
            -- 借“模拟”抛出异常
            RESIGNAL SET schema_name = 'mtt_dev',   
            table_name = 'tb_test',   
            message_text = @p2,  
            mysql_errno = @p1;
        END;
    
        START TRANSACTION;
    
        INSERT INTO `tb_test`(`name`)VALUES ('name');
        INSERT INTO `tb_test`(`name`)VALUES (NULL);
        INSERT INTO `tb_test`(`id`,`name`)VALUES (1,'name2');
        INSERT INTO `tb_test`(`id`,`name`)VALUES (1,'name3');    
            
        COMMIT;
    END$$
    
    DELIMITER ;
    -- 执行
    CALL sp_test();
  • 相关阅读:
    A good habit is half done
    mysql 练习题
    管理的实践
    mysql 表关联时执行顺序
    python 实现短信轰炸
    python django码云第三方登录
    mysql事务的隔离级别
    微服务
    什么是git
    如何使用Hexo创建博客
  • 原文地址:https://www.cnblogs.com/xachary/p/4751263.html
Copyright © 2011-2022 走看看