将存储过程修改为事务性应该很简单,但技术细节通常会造成障碍。一位用户在添加事务控件后其程序表现不稳定时遇到了这样的问题。
用户提供的有问题的代码片段复制如下:
<code class="sql">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</code>
用户强调该程序运行正常在引入事务控制之前,它是完美的,但之后,它甚至阻止了保存修改的基本任务。用户搜索了 MySQL 文档和在线资源,但没有检测到明显的错误。
对提供的代码的分析发现了两个语法错误:
要解决此问题,应将 DECLARE EXIT HANDLER 语句修改如下:
<code class="sql">DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING BEGIN ROLLBACK; END;</code>
通过这些更正,存储过程应成功实现事务性。
以上是为什么我的 MySQL 存储过程在添加事务控制后失败?的详细内容。更多信息请关注PHP中文网其他相关文章!