SQLite插入大量记录时出现问题

时间:2012-04-10 05:49:30

标签: sqlite

我试图使用SQLite3 shell在某个表中插入15530记录,但是我得到了该错误,我搜索了SQLITE_MAX_COMPOUND_SELECT解决方案,默认为500是原因,但我不知道如何使用Shell更改它。

“错误:复合SELECT中的术语太多了”

http://desmond.imageshack.us/Himg861/scaled.php?server=861&filename=sqlite.jpg&res=landing

INSERT INTO table_name (my_id, my_name) VALUES
(1, 'Aaliyah'),
(2, 'Alvar Aalto'),
(3, 'Willie Aames'),
...
(15530, 'name');

2 个答案:

答案 0 :(得分:14)

多值INSERT INTO语法为introduced in SQLite 3.7.11,因此最新版本的SQLite的原始语法很好。在旧版本中,您可以使用alternative syntax

但是,限制为SQLITE_MAX_COMPOUND_SELECT cannot be raised at runtime,因此您需要将插入内容拆分为每行500行。这比每个查询插入一行更有效。 E.g。

BEGIN;
INSERT INTO table_name (id, name) VALUES (1, 'foo'), ..., (500, 'bar');
INSERT INTO table_name (id, name) VALUES (501, 'baz'), ..., (1000, 'zzz');
...
COMMIT;

答案 1 :(得分:4)

INSERT INTO不会这样做。

试试这个:

BEGIN TRANSACTION
INSERT INTO author (author_id, author_name) VALUES (1, 'Aaliyah')
INSERT INTO author (author_id, author_name) VALUES (2, 'Alvar Aalto')
INSERT INTO author (author_id, author_name) VALUES (3, 'Willie Aames')
...
END TRANSACTION

http://www.sqlite.org/lang_insert.html