admin

简单的SQL Lite表/导入问题

sql

我有一个简单的SQL问题。我想建立一个三列数据库,并且我有以下代码:

sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"

当我尝试导入具有两列(prideID和pubmedID)的简单csv文件时,出现“预期3列数据,但发现2”错误。我希望t1key是一个整数,并在添加新字段时自动计数。我是否必须在主键前放置NOT
NULL才能使其正常工作?


阅读 154

收藏
2021-05-10

共1个答案

admin

.import不支持重塑输入(设置分隔符除外)。您需要将CSV文件导入到临时表中,然后将其插入到真实表中。这是一个示例会话:

$ cat a.csv 
1,2
3,4
5,6
$ sqlite3 a.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo(id integer primary key,x,y);
sqlite> create temp table footmp(x,y);
sqlite> .separator ,
sqlite> .import a.csv footmp
sqlite> select * from footmp;
1,2
3,4
5,6
sqlite> insert into foo(x,y) select * from footmp; 
sqlite> select * from foo; 
1,1,2
2,3,4
3,5,6
sqlite> drop table footmp;

您会看到ID已递增。这是因为类型为INTEGER PRIMARY KEY的列被视为内部ROWID的别名-内部ROWID始终是唯一的,升序的数字。

2021-05-10