MySQL - 如果在事务期间插入失败,是否会引发异常或警告?

时间:2016-06-03 00:56:39

标签: mysql stored-procedures transactions

我正在使用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:假设没有引发异常或警告,插入是否成功是否安全?

1 个答案:

答案 0 :(得分:0)

是的,如果插入语句失败,您将收到错误或警告。 sql mode setting上的Mysql文档有一个很好的摘要表,它描述了何时出现错误以及何时收到各种sql模式/忽略方案的警告。正如您在链接表中看到的那样,不会忽略任何警告,但错误可能会减少为警告。