Node.js 中的 MySQL 回滚

标签 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),但它却不断添加 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/

相关文章:

mysql - 存在公式减慢查询。需要优化

php - 当sql查询没有返回值时如何将min(value)变量设置为0

mysql - 当我在 Pagodabox.io 上推送我的 Laravel 应用程序时,迁移没有执行?

javascript - Res.render() 不渲染

phpmyadmin 导出到 csv for excel

php - Laravel 5 |违反完整性约束 : 1452

node.js - Nginx 在 80 端口设置 nodejs

javascript - Async/await 是如何工作的,为什么在这里不起作用

php - 在mysql中使用两个group by从同一个表中获取数据

mysql - 如何防止从 LAN 上的任何计算机(服务器除外)使用 Web 浏览器访问 phpmyadmin(MySQL 数据库)