【发布时间】:2017-03-08 18:51:10
【问题描述】:
我正在我的应用程序中测试 node-mysql 事务,方法是在第一次执行 UPDATE 后执行违反 UNIQUE 键约束的 INSERT。虽然 INSERT 失败,但我发现初始 UPDATE 是成功的,尽管有 ROLLBACK 的事务。 MySQL UPDATE 不会执行隐式提交,所以我不确定这里到底发生了什么。
pool.getConnection(function (err, connection) {
connection.beginTransaction(function (err) {
if (err) {
console.log(" --- error 1: " + JSON.stringify(err));
}
console.log(" --- A");
connection.query('update course_person set rescheduled_date = CURDATE() where idperson = ? and rescheduled_date is null', [idperson], function (err, rows, fields) {
if (err) {
connection.rollback(function () {
console.log(" --- error 2: " + JSON.stringify(err));
});
console.log(" --- B");
}
console.log(" --- C");
});
connection.query('insert into course_person (idcourse, idperson) VALUES (?, ?)', [newidcourse, idperson], function (err, rows, fields) {
if (err) {
connection.rollback(function () {
console.log(" --- error 3: " + JSON.stringify(err));
});
console.log(" --- D");
}
console.log(" --- E");
});
connection.commit(function (err) {
if (err) {
connection.rollback(function () {
console.log(" --- error 4: " + JSON.stringify(err));
});
console.log(" --- F");
}
console.log(" --- G");
req.flash('success', 'Person was updated successfully.');
res.redirect('/person/' + idperson);
connection.release();
});
});
});
我得到以下输出序列:
--- A
--- C
--- D
--- E
--- G
--- error 3: {"code":"ER_DUP_ENTRY","errno":1062,"sqlState":"23000","index":0}
这是我的证明:)
【问题讨论】:
标签: node.js transactions node-mysql