【发布时间】:2016-01-19 21:44:32
【问题描述】:
- 大家好。
我对 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)。
我也发现了这个。我删除了“开始交易;”和“提交”声明。并再次执行 updateNum SP。结果是……
1 行受影响
这一次,UPDATE 查询也运行良好。 numTable 的数据已成功更改。
为什么会出现这种差异?有没有办法使用 TRANSACTION 语句获得正确的受影响行?
我在 MySQL 5.6.27、MariaDB 10.0.21 和 MariaDB 10.1.8 上对此进行了测试,结果与上述相同。
感谢您阅读我的问题。
【问题讨论】:
标签: mysql transactions mariadb