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

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

然而,当我尝试这样做时,我得到了一个错误。是否可以在SQLite数据库中一次插入多行?这样做的语法是什么?


当前回答

你不能,但我不认为你错过了什么。

因为sqlite总是在进程中调用,所以执行1条插入语句还是100条插入语句对性能几乎没有影响。然而,提交需要花费很多时间,所以将这100个插入放在事务中。

当你使用参数化查询时,Sqlite要快得多(需要的解析要少得多),所以我不会像这样串联大语句:

insert into mytable (col1, col2)
select 'a','b'
union 
select 'c','d'
union ...

它们需要一遍又一遍地解析,因为每个连接的语句都是不同的。

其他回答

根据本页,不支持:

2007-12-03:不支持多行插入,也就是复合插入。

  INSERT INTO table (col1, col2) VALUES 
      ('row1col1', 'row1col2'), ('row2col1', 'row2col2'), ...

实际上,根据SQL92标准,VALUES表达式应该能够独立存在。例如,下面应该返回一个三行的单列表:VALUES 'john', 'mary', 'paul';

从3.7.11版本开始,SQLite支持多行插入。Richard Hipp评论道:

新的多值插入词仅仅是该复合词的句法糖(sic) 插入。无论如何,这都没有性能优势。”

从3.7.11版本开始,SQLite支持多行插入。理查德。 Hipp评论:

我使用的是3.6.13

我这样命令:

insert into xtable(f1,f2,f3) select v1 as f1, v2 as f2, v3 as f3 
union select nextV1+, nextV2+, nextV3+

一次插入50条记录,只需要一秒钟或更短的时间。

确实,使用sqlite一次插入多行是非常可能的。作者@Andy写道。

谢谢Andy

是的,从SQLite 3.7.11开始,SQLite支持这一点。从SQLite文档:

(当这个答案最初写的时候,这是不支持的)

为了兼容旧版本的SQLite,你可以使用andy和fearless_fool所建议的技巧,使用UNION,但对于3.7.11及以后版本,这里描述的更简单的语法应该是首选。

使用事务的问题是,您还锁定了用于读取的表。所以,如果你有很多数据要插入,你需要访问你的数据,例如预览之类的,这种方式就不太适用了。

另一个解决方案的问题是,您失去了插入的顺序

insert into mytable (col)
select 'c'
union 
select 'd'
union 
select 'a'
union 
select 'b';

在sqlite中,数据将被存储为a,b,c,d…

我有一个像下面这样的查询,但与ODBC驱动程序SQLite有一个错误“,”它说。 我运行vbscript在HTA (Html应用程序)。

    INSERT INTO evrak_ilac_iliskileri (evrak_id, ilac_id, 
baglayan_kullanici_id, tarih) VALUES (4150,762,1,datetime()),
(4150,9770,1,datetime()),(4150,6609,1,datetime()),(4150,3628,1,datetime()),
(4150,9422,1,datetime())