回答

收藏

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

技术问答 技术问答 129 人阅读 | 0 人回复 | 2023-09-13

在MySQL中,您可以像这样插入多行:
! e6 e8 A7 ]' c% UINSERT INTO 'tablename' ('column1', 'column2') VALUES
& A( @7 w& ]* |+ M* C( a% ?    ('data1', 'data2'),
. u( U# I0 l9 R% D    ('data1', 'data2'),$ I# {2 t$ }. @) S5 C0 U
    ('data1', 'data2'),
" `* T* B( ]5 p* {$ k    ('data1', 'data2');0 w4 ]: j  i& Q% N/ \' x9 H
但是,尝试执行此类操作时出现错误。是否可以一次在SQLite数据库中插入多行?这样做的语法是什么?$ L( y  ?% [; [/ J; U
                + n9 ^) D0 G( N4 V
解决方案:2 J- O( h, R* W
               
& u  x" P5 Y7 G0 U. J( J% w* F) \4 y% h( v( f$ V1 E9 q, k
3 g! Y* i$ w+ y3 {% V; L
                更新2 g5 b2 m- B2 T& q/ J. j
正如BrianCampbell在此处指出的那样,SQLite 3.7.11及更高版本现在支持原始文章的更简单语法 。但是,如果您希望在旧数据库之间实现最大兼容性,则所示的方法仍然适用。
% ^2 S3 H  C. M8 R% n; L原始答案
# C1 g1 _  o8 A# C  q8 u如果有特权,River的回答:您可以在SQLite中插入多行,只需要 不同的语法即可 。为了清楚起见,OPs MySQL示例:0 b+ E  {6 w: \. H; m
INSERT INTO 'tablename' ('column1', 'column2') VALUES
$ s- q9 e' O' l) L4 ^, p) w  ('data1', 'data2'),5 w" t! g9 m% n" A( K3 Y
  ('data1', 'data2'),
6 Z' [0 E4 n% H; H' |4 K& R( a  ('data1', 'data2'),% U. Q) h4 O. x3 f* ~
  ('data1', 'data2');+ {6 }) G( r0 V7 x" }
可以将其重铸到SQLite中,如下所示:% u, J6 J. [  d" t; X! c
     INSERT INTO 'tablename'
- j. n9 H* q- n  K          SELECT 'data1' AS 'column1', 'data2' AS 'column2'
  ]3 D0 O. z; J% EUNION ALL SELECT 'data1', 'data2'
7 g+ E/ i$ T6 S! g( I( F/ UUNION ALL SELECT 'data1', 'data2'
8 u) E  Q! Y- y7 p, dUNION ALL SELECT 'data1', 'data2'( x& E' I# H: ~2 d
性能说明
% ?9 k5 E0 O4 u我最初使用此技术从Ruby on Rails高效加载大型数据集。 但是 ,正如Jaime
: O6 s. m5 d# Y# t4 e! HCook所指出的那样,尚不清楚这是否可以更快地将INSERTs单个交易包装到单个交易中:8 B1 _. h- s3 c. y  B  W
BEGIN TRANSACTION;
" h- k5 d; E1 ~/ M9 `1 I) X' ?INSERT INTO 'tablename' table VALUES ('data1', 'data2');
* Q/ n! ?3 t$ E  HINSERT INTO 'tablename' table VALUES ('data3', 'data4');  T' u( [9 N7 F: t
...
4 f+ i* {! w; p  iCOMMIT;) S$ U1 M$ W+ k* A) O$ |
如果效率是您的目标,则应首先尝试这样做。6 x- z2 l1 Y4 j* _, f* V) m
关于UNION vs UNION ALL的注释: t1 A! ]8 D; R
正如几个人评论的那样,如果您使用UNION ALL(如上所示),则将插入所有行,因此,在这种情况下,您将获得4行data1,% C* v9 X5 L% R/ O- k
data2。如果省略ALL,则将消除重复的行(并且该操作可能会慢一些)。我们正在使用UNION ALL,因为它与原始帖子的语义更加匹配。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则