UPDATE SQL查询返回误导响应
问题描述:
我做一个简单的UPDATE SQL查询到使用的NodeJS数据库,如下图所示:UPDATE SQL查询返回误导响应
conn.query("UPDATE room SET `join_id`=? WHERE `id`=?", [join, cfid], function (e, r) {
console.log(e, r);
//e null; r object;
});
从查询的响应r
返回此:
OkPacket {
fieldCount: 0,
affectedRows: 1,
insertId: 0,
serverStatus: 34,
warningCount: 0,
message: '(Rows matched: 1 Changed: 1 Warnings: 0',
protocol41: true,
changedRows: 1
}
然而,在OKPacket
响应之后,我发现数据库中没有任何更改,因此我的其他代码出现故障。我花了几个小时研究这个问题,发现只是两年前的一个问题,这是没有得出结论:here
答
我的猜测是你有autocommit关闭,也许在MySQL服务器的my.cnf文件或其他办法。要进行检查,沿着这个线路运行代码:
let sql = "SHOW GLOBAL variables LIKE 'autocommit'";
connection.query(sql, function(err, result) {
console.log(result, 'global');
});
let sql2 = "SHOW variables LIKE 'autocommit'";
connection.query(sql2, function(err, result) {
console.log(result, 'local');
});
你的控制台应该输出
[ RowDataPacket { Variable_name: 'autocommit', Value: 'ON' } ] 'global'
[ RowDataPacket { Variable_name: 'autocommit', Value: 'ON' } ] 'local'
但如果是自动提交“OFF”,你有你的答案。
您是否打开了交易记录? – Dave
什么是交易? – Monstrum
如果您对必须全部成功或全部失败的数据库进行了若干更改,则首先启动事务。如果在某个时候出现故障,交易将“回滚”以避免不一致。如果一切顺利,您的交易“承诺”保存更改。请参阅[START TRANSACTION,COMMIT和ROLLBACK语法](http://dev.mysql.com/doc/refman/5.7/en/commit.html) – Dave