如何向 SQLite 3 表中插入多行?

问题描述 投票:0回答:4

在 MySQL 中我会使用

INSERT INTO `mytable` (`col1`, `col2`) 
VALUES (1, 'aaa'), (2, 'bbb');

但这会导致 SQLite 中出现错误。 SQLite 的正确语法是什么?

sql sqlite insert bulkinsert multiple-insert
4个回答
15
投票

这个问题之前已经回答过:是否可以在 SQLite 数据库中一次插入多行?

回答您对 OMG Ponies 的评论:

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

"The new multi-valued insert is merely syntactic suger (sic) for the compound insert. 
There is no performance advantage one way or the other."

8
投票

使用并集:

INSERT INTO `mytable` 
 (`col1`, `col2`) 
SELECT 1, 'aaa'
UNION ALL
SELECT 2, 'bbb'

UNION ALL
UNION
更快,因为
UNION
会删除重复项 -
UNION ALL
则不会。


6
投票

从2012-03-20版本(3.7.11)开始,sqlite支持以下INSERT语法:

INSERT INTO 'tablename' ('column1', 'column2') VALUES
  ('data1', 'data2'),
  ('data3', 'data4'),
  ('data5', 'data6'),
  ('data7', 'data8');

阅读文档:http://www.sqlite.org/lang_insert.html

SQLite INSERT Statement Diagram


0
投票

比如下面有

my_table

CREATE TABLE person (
  id INTEGER PRIMARY KEY, 
  name TEXT
  age INTEGER
);

然后,您可以通过以下方式将多行插入到

person
表中。 *对于
INTEGER PRIMARY KEY
id
,您可以将
NULL
自动递增1:

INSERT INTO person (id, name, age) 
VALUES (1, 'John', 36), (2, 'David', 24), (3, 'Lisa', 18);
INSERT INTO person (id, name, age) 
VALUES (NULL, 'John', 36), (NULL, 'David', 24), (NULL, 'Lisa', 18);
INSERT INTO person 
VALUES (1, 'John', 36), (2, 'David', 24), (3, 'Lisa', 18);
INSERT INTO person (id, name, age) 
VALUES (NULL, 'John', 36), (NULL, 'David', 24), (NULL, 'Lisa', 18);

然后,你可以得到下面相同的结果:

.headers on  
.mode box
SELECT * FROM person;
┌────┬───────┬─────┐
│ id │ name  │ age │
├────┼───────┼─────┤
│ 1  │ John  │ 36  │
│ 2  │ David │ 24  │
│ 3  │ Lisa  │ 18  │
└────┴───────┴─────┘
© www.soinside.com 2019 - 2024. All rights reserved.