美文网首页
Mysql:存储过程实现事务

Mysql:存储过程实现事务

作者: taogan | 来源:发表于2021-05-05 11:18 被阅读0次
CREATE DEFINER=`root`@`localhost` PROCEDURE `transaction_savepoint`(IN custId char,IN orderNum INT(10))
label:BEGIN

    -- mysql 异常规范
    -- DECLARE [action] HANDLER FOR [condition_value] [statement];
    -- 如果条件的值与condition_value匹配,则MySQL将执行statement,并根据该操作继续或退出当前的代码块。
    
    -- action:
        -- CONTINUE:继续执行封闭代码块(BEGIN ... END)。
        -- EXIT:处理程序声明封闭代码块的执行终止。
        
    -- condition_value指定一个特定条件或一类激活处理程序的条件。condition_value接受以下值之一:
        -- 一个MySQL错误代码
        -- 标准SQL-STATE值或者它可以是SQL-WARNING,NOT-FOUND或SQL-EXCEPTION条件,这是SQL-STATE值类的简写。NOT-FOUND条件用于游标或SELECT INTO variable_list语句。( -符号不需要)
        -- 与MySQL错误代码或SQLSTATE值相关联的命名条件。
    -- 该语句可以是一个简单的语句或由BEGIN和END关键字包围的复合语句。


        
    DECLARE has_err INT DEFAULT 0;
    DECLARE EXIT HANDLER FOR 1062 SELECT CONCAT('Duplicate entry',custId,'for key PRIMARY');
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET has_err = 1;
    
    START TRANSACTION;
    
    INSERT INTO `sql_inform`.`customers`(`cust_id`, `cust_name`, `cust_address`, `cust_city`, `cust_state`, `cust_zip`, `cust_country`, `cust_contact`, `cust_email`) VALUES (custId, 'Toy Land', '123 Any Street', 'New York', 'NY', '11111', 'USA', NULL, NULL);
    
    -- 定义保存点
    SAVEPOINT backpoint0;
    
    DELETE FROM orderitems WHERE order_num  = orderNum;
    
    IF has_err = 1 THEN
        -- 如果发生错误,回退到指定保持点的位置
        ROLLBACK TO backpoint0;
        SELECT 'orderitems ROLLBACK TO backpoint0' err_msg;
        LEAVE label; # 退出存储过程
    END IF;

    -- 错误语句 orders_num
    DELETE FROM orders WHERE orders_num = orderNum;
    
    IF has_err = 1 THEN
        -- 如果发生错误,回退到指定保持点的位置
        ROLLBACK TO backpoint0;
        SELECT 'orders ROLLBACK TO backpoint0' err_msg;
        LEAVE label; # 退出存储过程
    END IF;
    
    COMMIT;
END

相关文章

  • Mysql:存储过程实现事务

  • MySQL事务

    事务介绍 在MySQL中事务是由存储引擎实现的,而且支持事务的存储引擎不多,我们主要讲解InnoDB存储引擎中的事...

  • MySQL事务篇

    1 事务介绍 ​ 在MySQL中的事务是由存储引擎实现的,而且支持事务的存储引擎不多,我们主要讲解I...

  • 详解MySQL执行事务的语法和流程

    摘要:MySQL 提供了多种存储引擎来支持事务。 MySQL 提供了多种存储引擎来支持事务。支持事务的存储引擎有 ...

  • MySQL数据丢失情况分析

    一、存储引擎层面丢失数据(InnoDB存储引擎) MySQL默认情况下是开启内部的XA事务和事务的实现方式是基于r...

  • MySQL-索引、事务、存储过程

    写在前面 本文主要侧重于索引、事务、优化等方面的面试问题。原文链接:https://mp.weixin.qq.co...

  • Mysql innodb SQL语句加锁方式

    mysql innodb存储引擎支持事务,是mysql的默认存储引擎。 数据库事务 事务是由一组sql语句组成的逻...

  • MySQL分布式事务支持

    MySQL分布式事务介绍 InnoDB存储引擎提供了对XA事务的支持,并通过XA事务来支持分布式事务的实现。分布式...

  • 一文了解InnoDB事务实现原理

    本文准备通俗的讲解MySQL的InnoDB存储引擎事务的实现原理。 首先,我们知道事务具有ACID四个特性。也即:...

  • 15 MySQL 存储过程

    MySQL 存储过程 [toc] 存储过程概述 存储过程介绍 存储过程,相当于是 MySQL 语句组成的脚本 指的...

网友评论

      本文标题:Mysql:存储过程实现事务

      本文链接:https://www.haomeiwen.com/subject/czukdltx.html