sqlite - 使用last_insert_rowid() 进行多次插入

问题描述 投票:0回答:2

我正在尝试使用last_insert_rowid()将记录插入到我的“quote_link”表中,以从“quote”表中新创建的记录中获取id。然后我使用它作为值插入到“quote_link”表中的 ql_quote_id 列中。

这有效

tx.executeSql( 'INSERT INTO quotelink(ql_quote_id,ql_cat_id,ql_kind_id) Values (last_insert_rowid(),?,?)', [cat_id,kind_id], 

但是,我正在执行许多此类插入,并且只有第一个插入获得了 ql_quote_id 的正确值(对于第二个插入,last_insert_rowid() 的值从第一个插入中获取 id)

我想我需要执行一个选择子查询,但我不知道语法是什么

sqlite cordova insert auto-increment web-sql
2个回答
0
投票

结果集回调的

SQLResultSet
允许您获取该 ID:

tx.executeSql('INSERT INTO quote(...) VALUES(...)',
              [...],
              function(tx, result) {
    var quote_id = result.insertId;
    tx.executeSql('INSERT INTO quotelink(...) VALUES(?,?,?)',
                  [quote_id, cat_id, kind_id]);
});

0
投票

我使用以下纯SQLite方法(看起来SQLite不直接支持变量):

BEGIN TRANSACTION;
INSERT INTO quote (...) VALUES(...);
INSERT INTO quote_link (ql_quote_id,...) VALUES (last_insert_rowid(),...);
INSERT INTO quote_line (ql_quote_id,...) VALUES ((SELECT ql_quote_id FROM quote_link WHERE id=last_insert_rowid()),...);
COMMIT TRANSACTION;

因此,第一次插入报价表是很常见的。第一次插入 quote_link 表使用刚刚插入的last_insert_rowid()。所有其余插入到 quote_link 表中的操作都使用先前插入到 quote_link 表中的 ql_quote_id 值。

这样您就无需使用临时表来存储变量类型和其他令人头痛的问题。

© www.soinside.com 2019 - 2024. All rights reserved.