Heim >Datenbank >MySQL-Tutorial >Warum können meine gespeicherten MySQL-Prozeduren keine Transaktionen erfolgreich ausführen?
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
Identifizieren der Fehler
Bei genauer Betrachtung werden zwei Syntaxfehler identifiziert:
Fehlende Kommas im Exit-Handler:
Fehlendes 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;
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!