Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQLite中使用大容量插入自动生成的id_Sqlite - Fatal编程技术网

在SQLite中使用大容量插入自动生成的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表,它使用自动生成的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 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上运行,所以我们不需要升级。