knex.raw 和 trx.commit 在 knex.transactions
knex.raw and trx.commit in knex.transactions
我是 knex 的新手,遇到了 Transactions。我认为它很有用,因为它具有回滚功能。尝试使用它(见下面的代码)
await knex.transaction(trx => {
knex.raw(delete from myTable where "id" = 1 )
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback)
})
我只是想删除某个id的行而已。
工作正常,然后我尝试删除 'trx.commit'。我原以为它不会应用查询,但它确实应用了。据我了解,如果不调用 trx.commit 查询将不会 运行 并且不会影响数据库。
我的理解有误吗?我是不是在knex.transactions里面用错了knex.raw?我没有看到使用原始查询的交易示例。我已连接到本地主机 (postgresql) 中的数据库 btw。
knex.js 修改了 promise 接口。
调用 .then 会触发查询实际触发(如果它是第一个查询,则包括 BEGIN 事务)。请注意,在单个 knex 查询中,您不需要调用回滚,因为对数据库的单个查询应该是事务性的,如果遇到任何错误,则 abort/rollback。
根据您的使用情况(和文档),如果您删除 trx.commit
它根本不应该提交。我建议实际上向事务回调返回一个承诺 - 然后它将自动提交承诺解决方案,并自动回滚承诺失败。
在以下用法中,如果任一查询失败,它将自动回滚所有内容。
knex.transaction(trx => {
return Promise.all([
knex.raw(`update table x`).transacting(trx),
knex.raw(`update table y`).transacting(trx)
]);
})
我是 knex 的新手,遇到了 Transactions。我认为它很有用,因为它具有回滚功能。尝试使用它(见下面的代码)
await knex.transaction(trx => {
knex.raw(delete from myTable where "id" = 1 )
.transacting(trx)
.then(trx.commit)
.catch(trx.rollback)
})
我只是想删除某个id的行而已。 工作正常,然后我尝试删除 'trx.commit'。我原以为它不会应用查询,但它确实应用了。据我了解,如果不调用 trx.commit 查询将不会 运行 并且不会影响数据库。
我的理解有误吗?我是不是在knex.transactions里面用错了knex.raw?我没有看到使用原始查询的交易示例。我已连接到本地主机 (postgresql) 中的数据库 btw。
knex.js 修改了 promise 接口。
调用 .then 会触发查询实际触发(如果它是第一个查询,则包括 BEGIN 事务)。请注意,在单个 knex 查询中,您不需要调用回滚,因为对数据库的单个查询应该是事务性的,如果遇到任何错误,则 abort/rollback。
根据您的使用情况(和文档),如果您删除 trx.commit
它根本不应该提交。我建议实际上向事务回调返回一个承诺 - 然后它将自动提交承诺解决方案,并自动回滚承诺失败。
在以下用法中,如果任一查询失败,它将自动回滚所有内容。
knex.transaction(trx => {
return Promise.all([
knex.raw(`update table x`).transacting(trx),
knex.raw(`update table y`).transacting(trx)
]);
})