为什么MySQL(MariaDB)更新交易返回' 0行受影响'?

时间:2015-10-21 02:44:39

标签: mysql transactions mariadb

  • 大家好。

我对MySQL有些奇怪。 (哦,首先,抱歉我的英语不好。)

我制作了简单的表和存储过程。表定义是......

CREATE TABLE numTable (
    firstNum INT,
    secondNum INT
);
INSERT INTO numTable (firstNum, secondNum) VALUES (1, 2);

和SP是......

DELIMITER ;;

CREATE PROCEDURE updateNum (
    IN num1 INT,
    IN num2 INT
)

BEGIN

START TRANSACTION;

    UPDATE  numTable
    SET     firstNum = num1, secondNum = num2;

COMMIT;

END ;;

DELIMITER ;

然后我像这样执行了SP ......

CALL updateNum (3, 4);

MySQL返回......

  

0行受影响

当我看到这个结果时,我想'有语法错误吗?'但不是。 UPDATE查询工作正常。 numTable的数据从(1,2)变为(3,4)。

我也发现了这一点。我删除了“START TRANSACTION”;'和' COMMIT'声明。并再次执行updateNum SP。结果是......

  

受影响的一行

这一次,UPDATE查询工作正常。 numTable的数据已成功更改。

为什么会出现这种差异?有没有办法使用TRANSACTION语句获得受影响的行?

我在MySQL 5.6.27,MariaDB 10.0.21和MariaDB 10.1.8上进行了测试,结果与上面相同。

感谢您阅读我的问题。

2 个答案:

答案 0 :(得分:2)

您将使用

获取受影响的行
ROW_COUNT()

所以,SELECT ROW_COUNT() 最后

答案 1 :(得分:1)

类似于@Leow,但我发现没有交易,并且在更新后没有立即发生,所有都丢失了。所以:

objStudent