小编典典

是否可以一次在SQLite数据库中插入多行?

sql

在MySQL中,您可以像这样插入多行:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2'),
    ('data1', 'data2');

但是,尝试执行此类操作时出现错误。是否可以一次在SQLite数据库中插入多行?这样做的语法是什么?


阅读 309

收藏
2021-05-05

共1个答案

小编典典

更新

正如BrianCampbell在此处指出的那样,SQLite 3.7.11及更高版本现在支持原始文章的更简单语法 。但是,如果您希望在旧数据库之间实现最大兼容性,则所示的方法仍然适用。

原始答案

如果有特权,River的回答:您可以在SQLite中插入多行,只需要 不同的语法即可 。为了清楚起见,OPs MySQL示例:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
  ('data1', 'data2'),
  ('data1', 'data2'),
  ('data1', 'data2'),
  ('data1', 'data2');

可以将其重铸到SQLite中,如下所示:

     INSERT INTO 'tablename'
          SELECT 'data1' AS 'column1', 'data2' AS 'column2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2'
UNION ALL SELECT 'data1', 'data2'

性能说明

我最初使用此技术从Ruby on Rails高效加载大型数据集。 但是正如Jaime
Cook所指出的那样
,尚不清楚这是否可以更快地将INSERTs单个交易包装到单个交易中:

BEGIN TRANSACTION;
INSERT INTO 'tablename' table VALUES ('data1', 'data2');
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
...
COMMIT;

如果效率是您的目标,则应首先尝试这样做。

关于UNION vs UNION ALL的注释

正如几个人评论的那样,如果您使用UNION ALL(如上所示),则将插入所有行,因此,在这种情况下,您将获得4行data1, data2。如果省略ALL,则将消除重复的行(并且该操作可能会慢一些)。我们正在使用UNION ALL,因为它与原始帖子的语义更加匹配。

2021-05-05