2

1 つのテーブルに行を挿入し、その行から生成された 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

レコードを挿入した後foo、その ID をsqlite3_last_insert_rowid (またはデータベース ラッパーがそのために使用するもの) で読み取り、その値を次のすべての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 に答える