node.js中的MySQL回滚

时间:2016-08-01 14:05:32

标签: mysql node.js phpmyadmin

我正在尝试通过node.js在MySQL中发布以下内容(使用https://github.com/mysqljs/mysql库)。

我正在使用事务API在发生错误时回滚,但它似乎没有回滚。我接下来试图简化问题并将其直接放在PHPMyAdmin SQL框中以执行以下操作....

START TRANSACTION;
UPDATE users SET balance=balance + 1 WHERE id_user='someuserid'
ROLLBACK WORK;

我原本期望用户余额保持在之前的值(124),而是继续添加一个,并在此结束时显示125的更新余额。

知道我做错了什么吗?可能是MySQL Db不支持事务和/或UPDATE这样允许在事务中回滚吗?

1 个答案:

答案 0 :(得分:1)

好的,问题解决了。

对于遇到此问题的其他人的参考,这是因为正在使用表引擎。

我的桌子使用的是MyISASM,它不支持交易并且无声地失败。它在每次交易时自动提交,因此ROLLBACK从未做过任何事情。

修复是将表格引擎从 MyISAM 更改为 InnoDB (通过phpmyadmin执行但也可以通过 ALTER TABLE table_name ENGINE=InnoDB; sql命令。

现在以下工作完美无缺。

START TRANSACTION;
UPDATE users SET balance = 8 WHERE id_user='s10';
UPDATE users SET balance = 9 WHERE id_user='s12';
ROLLBACK;