我正在尝试通过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这样允许在事务中回滚吗?
答案 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;