为什么我的MySQL存储过程无法成功执行事务?

DDD
发布: 2024-10-24 23:47:30
原创
302 人浏览过

Why Do My MySQL Stored Procedures Fail to Execute Transactions Successfully?

解决 MySQL 存储过程中的事务问题

当尝试在 MySQL 存储过程中实现事务时,开发人员可能会遇到意外错误。本文将探讨可能阻止事务性存储过程成功执行的语法和逻辑错误。

案例:一次不成功的事务

开发人员在以下情况下遇到问题尝试在存储过程中实现事务。尽管遵循了 MySQL 文档,但该过程未能成功执行并提示无法保存更改。经过进一步检查,代码在语法上似乎是正确的。

分析代码

提供的代码片段如下:

BEGIN

DECLARE poid INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING
BEGIN
    ROLLBACK;
END

START TRANSACTION;

    -- ADD option 5
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
    SET poid = (SELECT LAST_INSERT_ID());
    INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,'+',0,'+',0,'+');

    -- ADD option 12
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);

    -- ADD option 13
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);

COMMIT;

END
登录后复制

识别错误

经过仔细检查,发现两个语法错误:

  1. 退出处理程序中缺少逗号:

    • 在 EXIT HANDLER 声明中,应该用逗号分隔条件。
  2. 缺少分号:

    • EXIT HANDLER 的 END 语句缺少终止分号。

更正的代码

更正的代码代码如下:

BEGIN

DECLARE poid INT;

DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
    ROLLBACK;
END;

START TRANSACTION;

    -- ADD option 5
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,5,0);
    SET poid = (SELECT LAST_INSERT_ID());
    INSERT INTO product_option_value(product_option_id,product_id,option_id,option_value_id,quantity,subtract,price,price_prefix,points,points_prefix,weight,weight_prefix) VALUES(poid,insertedProductID,5,50,0,0,4.99,'+',0,'+',0,'+');

    -- ADD option 12
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,12,1);

    -- ADD option 13
    INSERT INTO product_option(product_id,option_id,required) VALUES(insertedProductID,13,0);

COMMIT;

END;
登录后复制

以上是为什么我的MySQL存储过程无法成功执行事务?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!