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

enG*_*izo 8 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');
Run Code Online (Sandbox Code Playgroud)

Dan*_*son 14

SQLite 3.7.11引入了多值INSERT INTO语法,因此最新版本的SQLite的原始语法很好.在旧版本中,您可以使用其他语法.

但是,SQLITE_MAX_COMPOUND_SELECT 在运行时不能提高限制,因此需要将插入分成每行500行的批处理.这比每个查询插入一行更有效.例如

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

  • 为什么当语法完全消除时,SQLite将多插入视为一个选择?这没有任何意义,特别是根据文件说明:"我们认为这是一个慷慨的分配,因为在实践中我们几乎从未看到复合选择中的术语数量超过一位数.但事实上我可能有数千或者我想在一个语句中插入数百万行! (4认同)

Rob*_*vey 5

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
Run Code Online (Sandbox Code Playgroud)

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

  • 嗯,是的,从 3.7.11 版开始,它*确实*以这种方式工作。不再需要使用这种在事务的单独插入中插入行的旧方法。那么为什么新方法声称我们正在执行复合选择,而这不再是真实的(查询中没有“选择”!)? (7认同)