在MySQL中,您可以像这样插入多行:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2'),
('data1', 'data2');
但是,尝试执行此类操作时出现错误。是否可以一次在SQLite数据库中插入多行?这样做的语法是什么?
最佳答案
更新
与BrianCampbell points out here一样, SQLite 3.7.11及更高版本现在支持原始的更简单语法。但是,如果您希望在旧数据库之间实现最大兼容性,则所示的方法仍然适用。
原始答案
如果我有特权,我会碰碰river's reply:您可以在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高效加载大型数据集。 但是,as Jaime Cook points out,尚不清楚这是否可以更快地在单个事务中包装各个
INSERTs
:BEGIN TRANSACTION;
INSERT INTO 'tablename' table VALUES ('data1', 'data2');
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
...
COMMIT;
如果效率是您的目标,则应首先尝试这样做。关于UNION vs UNION ALL的注释
正如一些人评论的那样,如果使用
UNION ALL
(如上所示),将插入所有行,因此在这种情况下,您将获得四行data1, data2
。如果省略ALL
,那么将消除重复的行(并且该操作可能会慢一些)。我们正在使用UNION ALL,因为它与原始帖子的语义更加匹配。在结束时
附注:请+1 river's reply,因为它首先提出了解决方案。