我正在尝试通过 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),但它却不断添加 1,并在最后显示更新后的余额 125。
知道我做错了什么吗?可能是 MySQL 数据库不支持事务和/或这样的 UPDATE 是否允许在事务中回滚?
最佳答案
好的,问题解决了。
供遇到此问题的其他人引用,这是因为使用了表引擎。
我的表使用的是 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;
关于Node.js 中的 MySQL 回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38700958/