Подтвердить что ты не робот

AUTO_INCREMENT в проблеме sqlite с python

Я использую sqlite с python 2.5. Я получил ошибку sqlite с синтаксисом ниже. Я огляделся и увидел AUTOINCREMENT на этой странице http://www.sqlite.org/syntaxdiagrams.html#column-constraint, но это тоже не сработало. Без AUTO_INCREMENT моя таблица может быть создана.

An error occurred: near "AUTO_INCREMENT": syntax error 
CREATE TABLE fileInfo
(
fileId int NOT NULL AUTO_INCREMENT,
name varchar(255),
status int NOT NULL,
PRIMARY KEY (fileId)
);
4b9b3361

Ответ 1

Это описано в SQLite FAQ. Вопрос № 1.

Какие состояния:

Как создать AUTOINCREMENT поле?

Краткий ответ: объявленный столбец ПЕРВИЧНЫЙ КЛЮЧ INTEGER автоинкремент.

Вот длинный ответ: если вы объявить столбец таблицы INTEGER PRIMARY KEY, тогда всякий раз, когда вы вставьте NULL в этот столбец таблицы, NULL автоматически преобразуется в целое число, которое является одним больше, чем наибольшее значение этого столбец над всеми другими строками в таблицы или 1, если таблица пуста. (Если максимально возможный целочисленный ключ, 9223372036854775807, затем неиспользованный значение ключа выбирается случайным образом.) Для Например, предположим, что у вас есть таблица типа это:

CREATE TABLE t1( a INTEGER PRIMARY KEY, b INTEGER ); В этой таблице, утверждение

INSERT INTO t1 VALUES(NULL,123); является логически эквивалентно высказыванию:

INSERT INTO t1 VALUES((SELECT max(a) FROM t1)+1,123); Существует функция назван sqlite3_last_insert_rowid()который вернет целочисленный ключ для самая последняя операция вставки.

Обратите внимание, что целочисленный ключ является одним больше, чем самый большой ключ, который был в таблице непосредственно перед вставкой. Новый ключ будет уникальным по всем в настоящее время в таблице, но это может перекрываться с ключами, которые были ранее удаленных из таблицы. к создавать ключи, которые уникальны по время жизни таблицы, добавьте Ключевое слово AUTOINCREMENT для INTEGER PRIMARY KEY декларация. Затем ключ выбрано будет больше, чем самый большой ключ, который когда-либо существовал в эта таблица. Если возможно наибольшее ключа ранее существовали в таблицы, то INSERT не сработает с код ошибки SQLITE_FULL.

Ответ 3

Вы можете попробовать

CREATE TABLE fileInfo
(
fileid INTEGER PRIMARY KEY AUTOINCREMENT,
name STRING,
status INTEGER NOT NULL
);

Ответ 4

Мы просто изменили порядок от

NOT NULL, AUTO_INCREMENT 

в

AUTO_INCREMENT NOT NULL,