我已经在互联网上进行搜索,但是找不到解决我问题的方法。 我正在使用带有池连接的NodeJS和MariaDB。 我从池中获得一个连接,进行了一个事务(没有错误),但是我看不到数据库内部有任何机会。 如果我不使用事务使用查询,只需使用pool.query(...),它就可以正常工作。我知道只需要一个查询就不需要事务,但是我只是为您简化了代码。
pool.getConnection()
.then(conn =>{
conn.beginTransaction()
.then(() =>{
return conn.query("UPDATE Users SET forename='Tom' WHERE user_id=8")
})
.then(()=>{
console.log("commit")
conn.commit()
//conn.end() --> doesn't change anything
})
.catch((err)=>{
console.log(err.message);
conn.rollback()
})
});
这是怎么了?
谢谢!
答案 0 :(得分:1)
这似乎是MariaDB驱动程序中的一个错误,其中conn.commit()
并未实际提交。该错误已记录在here中。
在该评论中,建议通过手动调用COMMIT
来解决此问题:
conn.query('COMMIT');
还请确保在完成连接后结束连接,以将连接释放回池中:
.then(()=>{
return conn.query("COMMIT").then(() => {
return conn.end();
});
})
.catch((err)=>{
return conn.query("ROLLBACK").then(() => {
conn.end();
throw new Error(err)
});
})
答案 1 :(得分:1)
这是一个错误,正如@robertklep所指出的,一种解决方法是执行conn.query(“ COMMIT”)命令。
但是jira.mariadb.org/browse/CONJS-52是,并且已通过最新版本(2.0.1)进行了纠正