在 MySQL 中我会使用
INSERT INTO `mytable` (`col1`, `col2`)
VALUES (1, 'aaa'), (2, 'bbb');
但这会导致 SQLite 中出现错误。 SQLite 的正确语法是什么?
这个问题之前已经回答过:是否可以在 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."
使用并集:
INSERT INTO `mytable`
(`col1`, `col2`)
SELECT 1, 'aaa'
UNION ALL
SELECT 2, 'bbb'
UNION ALL
比 UNION
更快,因为 UNION
会删除重复项 - UNION ALL
则不会。
从2012-03-20版本(3.7.11)开始,sqlite支持以下INSERT语法:
INSERT INTO 'tablename' ('column1', 'column2') VALUES
('data1', 'data2'),
('data3', 'data4'),
('data5', 'data6'),
('data7', 'data8');
比如下面有
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 │
└────┴───────┴─────┘