Простой вопрос о таблице/импорте SQL Lite

У меня есть простой вопрос о SQL. Я хочу сделать базу данных на 3 столбца, и у меня есть следующий код:

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

Когда я пытаюсь импортировать простой файл CSV с двумя столбцами (prideID и pubmedID), я получаю "ожидаемые 3 столбца данных, но нашел 2" ошибки. Я хочу, чтобы t1key был целым числом и автоматически подсчитал, поскольку добавляются новые поля. Я должен поместить NOT NULL перед PRIMARY KEY к тому, чтобы это работало?

8
задан Bobby 15 July 2010 в 23:20
поделиться

1 ответ

.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, который всегда является уникальным возрастающим числом.

20
ответ дан 5 December 2019 в 07:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: