Heim > Datenbank > MySQL-Tutorial > Hauptteil

Warum können meine gespeicherten MySQL-Prozeduren keine Transaktionen erfolgreich ausführen?

DDD
Freigeben: 2024-10-24 23:47:30
Original
302 Leute haben es durchsucht

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

Transaktionsprobleme in gespeicherten MySQL-Prozeduren lösen

Beim Versuch, Transaktionen innerhalb einer gespeicherten MySQL-Prozedur zu implementieren, können Entwickler auf unerwartete Fehler stoßen. In diesem Artikel werden die Syntax- und logischen Fehler untersucht, die die erfolgreiche Ausführung transaktionaler gespeicherter Prozeduren verhindern können.

Der Fall: Eine erfolglose Transaktion

Ein Entwickler stößt auf ein Problem, wenn Versuch, Transaktionen in einer gespeicherten Prozedur zu implementieren. Obwohl die MySQL-Dokumentation befolgt wird, schlägt die erfolgreiche Ausführung des Verfahrens fehl und führt dazu, dass die Änderungen nicht gespeichert werden können. Bei näherer Betrachtung scheint der Code syntaktisch korrekt zu sein.

Analyse des Codes

Der bereitgestellte Codeausschnitt lautet wie folgt:

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
Nach dem Login kopieren

Identifizieren der Fehler

Bei genauer Betrachtung werden zwei Syntaxfehler identifiziert:

  1. Fehlende Kommas im Exit-Handler:

    • In der EXIT HANDLER-Deklaration sollten die Bedingungen durch Kommas getrennt werden.
  2. Fehlendes Semikolon:

    • Der END-Anweisung des EXIT HANDLER fehlt ein abschließendes Semikolon.

Der korrigierte Code

Der korrigierte Der Code lautet wie folgt:

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;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum können meine gespeicherten MySQL-Prozeduren keine Transaktionen erfolgreich ausführen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!