UPDATE SQL查询返回误导响应

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

+1

您是否打开了交易记录? – Dave

+0

什么是交易? – Monstrum

+0

如果您对必须全部成功或全部失败的数据库进行了若干更改,则首先启动事务。如果在某个时候出现故障,交易将“回滚”以避免不一致。如果一切顺利,您的交易“承诺”保存更改。请参阅[START TRANSACTION,COMMIT和ROLLBACK语法](http://dev.mysql.com/doc/refman/5.7/en/commit.html) – Dave

我的猜测是你有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”,你有你的答案。