Ich verwende MySQL Connector/Python die folgende gespeicherte Prozedur aufzurufen:MySQL - Wenn eine Einfügung während einer Transaktion fehlschlägt, wird IMMER eine Ausnahme oder Warnung ausgelöst?
CREATE PROCEDURE AddDishReview
(
id INT,
OUT retVal TINYINT(1)
)
this_proc:BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
END;
START TRANSACTION;
INSERT INTO Table1 VALUES (id);
IF ROW_COUNT() < 1 THEN
ROLLBACK;
LEAVE this_proc;
END IF;
SET @table1RefID = LAST_INSERT_ID();
INSERT INTO Table2 VALUES (@table1RefID);
IF ROW_COUNT() < 1 THEN
ROLLBACK;
LEAVE this_proc;
END IF;
SET retVal = 1;
COMMIT;
END //
DELIMITER ;
Meine Frage ist, wenn eine Einfügung fehlschlägt, wird es immer eine Ausnahme oder Warnung ausgelöst werden (das würde wiederum Trigger der Exit-Handler)? Ich kann einfach nicht helfen, aber ich habe das Gefühl, dass alle IF ROW_COUNT < 1
Checks unnötig sind. Aber ich habe sie dort eingefügt, weil ich nicht sicher war, ob ein Einfügen fehlschlagen konnte, ohne eine Ausnahme/Warnung auszulösen (was dazu führen würde, dass die Ausführung fortgesetzt würde und ROW_COUNT
von 0).
tl; dr: Ist es sicher anzunehmen, dass, wenn keine Ausnahme oder Warnung ausgelöst wird, die Einfügung erfolgreich war?