gpt4 book ai didi

mysql - 事务回滚后不执行查询

转载 作者:行者123 更新时间:2023-11-29 14:22:40 33 4
gpt4 key购买 nike

我想在node-mysql中执行事务(通过执行查询START TRANSACTION、ROLLBACK、COMMIT)。我有这段代码:

conn.query("START TRANSACTION");
conn.query("INSERT INTO users (id, name, age) VALUES (1, 'Mat', '24')", function(e){
if (e){
conn.query("ROLLBACK", callback);
}
else{
conn.query("COMMIT", callback);
}
});

conn.query("INSERT INTO users (name, age) VALUES ('Mat', '24')", function(e, r){
console.log(e); // null
console.log(r); // {fieldCount: 0, affectedRows: 1, insertId: 2, serverStatus: 3, warningCount: 0, message: ''}
});

为了测试回滚情况,我故意将 id 设置为 1,这会导致索引重复错误。事务回滚了,但问题是事务外的第二次插入没有执行。没有记录错误,而且 - 对我来说奇怪的是 - 当我在第二次插入后选择整个表时,结果中有新行。但在另一种联系中它就消失了。所以看起来在连接结束时新创建的行被删除。提交事务后不会出现该问题。

最佳答案

您的第二个 INSERT INTO 可以在第一个 INSERT INTO 回调中的 ROLLBACK 之前执行,因为它是在回调之外执行的。当发生这种情况时,您的第二个插入也会回滚,因为您使用的是单个连接。将第二个插入移动到第一个插入的回调中以序列化事物。

关于mysql - 事务回滚后不执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11513776/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com