我对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上进行了测试,结果与上面相同。
感谢您阅读我的问题。
答案 0 :(得分:2)
您将使用
获取受影响的行ROW_COUNT()
所以,SELECT ROW_COUNT() 最后
答案 1 :(得分:1)
类似于@Leow,但我发现没有交易,并且在更新后没有立即发生,所有都丢失了。所以:
objStudent