【发布时间】:2016-06-03 00:56:39
【问题描述】:
我正在使用 MySQL Connector/Python 调用以下存储过程:
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 ;
我的问题是,如果插入失败,是否会总是引发异常或警告(这又会触发退出处理程序)?我只是不禁觉得所有IF ROW_COUNT < 1 检查都是不必要的。但我把它们放在那里是因为我不确定插入是否有可能在不引发异常/警告的情况下失败(这将导致执行继续并且ROW_COUNT 为 0)。
tl;dr:如果没有引发异常或警告,是否可以安全地假设插入成功?
【问题讨论】:
标签: mysql stored-procedures transactions