我正在尝试使用 node-sqlite3 从我的 node.js 应用程序在数据库中执行 INSERT + UPDATE 事务。但是,我无法弄清楚事务完成后如何获取 last_insert_rowid。我的查询看起来像这样:
BEGIN TRANSACTION;
INSERT INTO <table> (field1, ...) VALUES (value1, ...);
UPDATE <table> SET prev=last_insert_rowid() WHERE <condition>;
END TRANSACTION;
这个字符串(减去额外的空格)被分配给 var q
。
我在某个时候使用这个打开了我的数据库:
var db = new sqlite3.Database(dbfile)
但如果我尝试使用:
db.run(q, function(err) {
if (err) ...
console.log(this.lastId)
})
它不仅没有错误地打印“0”,而且不会对数据库进行任何更改!!!如果我使用exec
而不是run
查询成功运行,但我无法从 exec 获取任何数据。
我也尝试过这样的事情:
db.exec(q, function(err) {
if (err) ...
db.run(";", function(err) {
if (err) ...
console.log(this.lastId)
})
})
但是“run”上的“this”上下文没有 lastId 属性!
我还查看了 sqlite3-transaction 包,但它似乎也没有在事务回调中提供任何信息!
我不能将插入作为单独的 run() 运行,获取this.lastId
然后使用它来运行更新,因为这将使数据库在两个语句之间处于无效状态(因此需要事务)。
如何从此事务中获取 last_insert_rowid()?