回答

收藏

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

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

在MySQL中,您可以像这样插入多行:
9 C( X& W% @0 X: w3 o& Y2 MINSERT INTO 'tablename' ('column1', 'column2') VALUES
2 I% e0 k" Y5 h; t% U4 z+ p1 V    ('data1', 'data2'),
4 k9 O( z3 [! G, {1 L; \1 q0 H    ('data1', 'data2'),
9 v" D* _8 r- O3 Y5 p    ('data1', 'data2'),8 @& Z8 h& h8 u
    ('data1', 'data2');1 x0 w" S* X' H/ `0 H! y
但是,尝试执行此类操作时出现错误。是否可以一次在SQLite数据库中插入多行?这样做的语法是什么?
6 x* B& x" ~: V( o( i, u! I                * q, f& m( w" m5 W( I9 P& |
解决方案:
/ x9 V% \$ j4 q9 B, I               
4 r* ?- d3 m1 m$ l$ q/ k8 S# J. Z# t
7 k& P, ]! j" |) p+ ?
                更新- b" m# Z6 r6 Z+ l) o4 T
正如BrianCampbell在此处指出的那样,SQLite 3.7.11及更高版本现在支持原始文章的更简单语法 。但是,如果您希望在旧数据库之间实现最大兼容性,则所示的方法仍然适用。: `& R- e$ W4 n/ Z9 w1 P+ e
原始答案
6 c: F2 [( e3 X( n5 h如果有特权,River的回答:您可以在SQLite中插入多行,只需要 不同的语法即可 。为了清楚起见,OPs MySQL示例:; e  O. l9 X+ J8 t, M' E# |
INSERT INTO 'tablename' ('column1', 'column2') VALUES& O2 L7 T& ~. K
  ('data1', 'data2'),
* B+ |  O+ ^: `7 r# j# K  ('data1', 'data2'),+ o9 A/ p; u: n( H! q6 n
  ('data1', 'data2'),
8 m* Y( n8 e8 c$ \3 Y5 ?$ Y7 P  ('data1', 'data2');
' X& e" {+ J! E/ R% L0 x可以将其重铸到SQLite中,如下所示:
5 G4 Z2 e8 P+ z  B$ N     INSERT INTO 'tablename'
; a$ G, ?6 i" L/ _          SELECT 'data1' AS 'column1', 'data2' AS 'column2'( [" l, b2 m1 g( ]: N
UNION ALL SELECT 'data1', 'data2'
1 \  _1 s& b- t! BUNION ALL SELECT 'data1', 'data2'
3 K" T' H% T( l" N; Y8 `* h1 ?) WUNION ALL SELECT 'data1', 'data2'
- f: b* l( [# k4 `& |7 f性能说明0 @4 |3 j+ u( n* a) e7 w) ^& v, y# M
我最初使用此技术从Ruby on Rails高效加载大型数据集。 但是 ,正如Jaime; t( o& {; y& I, [
Cook所指出的那样,尚不清楚这是否可以更快地将INSERTs单个交易包装到单个交易中:+ R+ H# v9 {6 @3 t
BEGIN TRANSACTION;" b  a4 S1 B/ z# l( Q4 O9 p' P  [/ S
INSERT INTO 'tablename' table VALUES ('data1', 'data2');& N, x; M/ O3 }2 w, I5 m9 Q
INSERT INTO 'tablename' table VALUES ('data3', 'data4');
3 R. w* w8 O8 W. a& J+ B* x...0 ?! s! v* T! y+ z8 f
COMMIT;
5 P) {% F1 ~* y! m; Q如果效率是您的目标,则应首先尝试这样做。
/ a* Y7 c' j; ?$ D/ C( }关于UNION vs UNION ALL的注释
. z, |5 y5 {1 h; J9 @$ |" n8 t正如几个人评论的那样,如果您使用UNION ALL(如上所示),则将插入所有行,因此,在这种情况下,您将获得4行data1,& o# H, K! t. \/ U  k! T
data2。如果省略ALL,则将消除重复的行(并且该操作可能会慢一些)。我们正在使用UNION ALL,因为它与原始帖子的语义更加匹配。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则