在SQLite中使用大容量插入自动生成的id
我有一个SQLite表,它使用自动生成的id作为主键。我想使用UNION SELECT进行批量插入,但除非我为每一行指定一个id,否则它似乎不会令人满意:在SQLite中使用大容量插入自动生成的id,sqlite,Sqlite,我有一个SQLite表,它使用自动生成的id作为主键。我想使用UNION SELECT进行批量插入,但除非我为每一行指定一个id,否则它似乎不会令人满意: sqlite> create table CelestialObject (id INTEGER PRIMARY KEY, name VARCHAR(25), distance REAL); sqlite> insert into CelestialObject select 'Betelguese' as name, 200 a
sqlite> create table CelestialObject (id INTEGER PRIMARY KEY, name VARCHAR(25), distance REAL);
sqlite> insert into CelestialObject select 'Betelguese' as name, 200 as distance UNION SELECT 'Procyon', 500;
Error: table CelestialObject has 3 columns but 2 values were supplied
如果在创建表时为id指定AUTOINCREMENT(即“id INTEGER主键AUTOINCREMENT”),则错误相同
有谁能告诉我是否有一种方法可以在不为每行指定id的情况下使用大容量插入?每行提供三个值:
INSERT INTO CelestialObject SELECT NULL, 'x', 42 ...
或者明确指定要填充的列:
INSERT INTO CelestialObject(name, distance) SELECT 'x', 42 ...
如果您有SQLite 3.7.11或更高版本,则可以更轻松地进行批量插入:
INSERT INTO CelestialObject(name, distance)
VALUES ('Betelgeose', 200),
('Procyon', 500),
... ;
我刚刚安装了3.7.14,并使用了您最后的建议。它工作得很好。谢谢我将把这个问题搁置一会儿,看看是否有人提出其他建议。事实证明,您可以为id指定NULL,并将使用正确的id进行填充:
insert into CelestialObject选择NULL作为id,'Betelguese'作为名称,200作为距离UNION选择NULL,'Procyon',500代码>因为这甚至可以在较旧的SQLite上运行,所以我们不需要升级。