首頁  >  文章  >  資料庫  >  為什麼我的 MySQL 預存程序在執行事務後失敗?

為什麼我的 MySQL 預存程序在執行事務後失敗?

Barbara Streisand
Barbara Streisand原創
2024-10-24 23:06:31753瀏覽

Why is My MySQL Stored Procedure Failing After Implementing Transactions?

MySQL 儲存過程中的交易實作

為了增強資料可靠性,使用者嘗試在其 MySQL 儲存過程中實現交易。然而,這些變化導致該程式無法運作。儘管查閱文件並在線搜索,用戶仍無法識別錯誤。

檢查提供的程式碼後,明顯有兩個語法錯誤:

  1. 退出處理程序中缺少逗號: SQL 異常和警告的退出處理程序應使用逗號分隔條件。正確的語法規定:DECLARE EXIT HANDLER FOR SQLEXCEPTION,SQLWARNING 而不是 DECLARE EXIT HANDLER FOR SQLEXCEPTION SQLWARNING。
  2. 退出處理程序缺少分號: 也必須遵循終止退出處理程序的 END 語句就像任何其他語句一樣,用分號分隔。這看起來像: END;

一旦更正這些語法錯誤,該過程就應該按預期運行,從而允許用戶無縫地實現交易。修正後的程式碼應類似以下內容:

<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 預存程序在執行事務後失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn