2

如何在一个表中插入一行并将从该行生成的 id 用于另一行,以便围绕整个事物进行事务处理?我遇到的问题是数据库延迟很大,因为我有 10 万条记录,但我一次只能处理 1-100 条记录。

INSERT INTO foo;
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT INTO foo;
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
INSERT into bar(foo_id) VALUES (last_foo_id)
4

2 回答 2

1

插入记录后,使用sqlite3_last_insert_rowid(或您的数据库包装器使用的任何内容)foo读取其 ID ,并在以下所有插入语句中使用该值:bar

db.execute("BEGIN TRANSACTION")
db.execute("INSERT INTO foo ...")
foo_id = db.last_insert_rowid
db.execute("INSERT INTO bar(foo_id) VALUES (?)", [foo_id])
...
db.execute("COMMIT TRANSACTION")
于 2013-06-05T16:28:54.983 回答
0

使用该last_insert_rowid()功能。

于 2013-06-05T15:58:52.570 回答