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();
  • 相关阅读:
    封装小程序http请求
    ES6为数组做的扩展
    练习题
    二叉树的遍历
    快速搭建vue项目
    收集的前端面试大全
    ios兼容webp格式的图片
    小程序开发API之获取启动参数
    使用HTML编写邮件
    深入理解javascript原型和闭包(9)——this
  • 原文地址:https://www.cnblogs.com/xachary/p/4751263.html
Copyright © 2011-2022 走看看