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

Неважно, оказалось, что это была другая ошибка - вызывал отдельный файл JSON и забыл удалить запятую ...

12
задан 3 February 2009 в 19:49
поделиться

3 ответа

Это обращено в FAQ SQLite. Вопрос № 1.

Который указывает:

Как я создаю поле AUTOINCREMENT?

Короткий ответ: столбец объявил, что ЦЕЛОЧИСЛЕННЫЙ PRIMARY KEY будет автоинкремент.

Вот длинный ответ: Если Вы объявляете, что столбец таблицы ЦЕЛОЧИСЛЕННЫЙ PRIMARY KEY, то каждый раз, когда Вы вставляете ПУСТОЙ УКАЗАТЕЛЬ в тот столбец таблицы, ПУСТОЙ УКАЗАТЕЛЬ автоматически преобразовывается в целое число, которое является одним большим, чем самое большое значение того столбца по всем другим строкам в таблице, или 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() который возвратит целочисленный ключ для новой операции вставки.

Обратите внимание, что целочисленный ключ является одним большим, чем самый большой ключ, который был в таблице только до вставки. Новый ключ в настоящее время будет уникален по всем ключам в таблице, но это могло бы наложиться с ключами, которые были ранее удалены из таблицы. Для создания ключей, которые уникальны за время жизни таблицы добавьте АВТОИНКРЕМЕНТНОЕ ключевое слово к ЦЕЛОЧИСЛЕННОМУ объявлению PRIMARY KEY. Затем выбранный ключ будет еще одним, чем, чем самый большой ключ, который когда-либо существовал в той таблице. Если самый большой ключ ранее существовал в той таблице, то ВСТАВКА перестанет работать с кодом ошибки SQLITE_FULL.

40
ответ дан 2 December 2019 в 03:01
поделиться

Вы могли попробовать

CREATE TABLE fileInfo
(
fileid INTEGER PRIMARY KEY AUTOINCREMENT,
name STRING,
status INTEGER NOT NULL
);
6
ответ дан 2 December 2019 в 03:01
поделиться

Похоже, что AUTO_INCREMENT должен быть АВТОИНКРЕМЕНТОМ, см. http://www.sqlite.org/syntaxdiagrams.html#column-constraint

10
ответ дан 2 December 2019 в 03:01
поделиться
Другие вопросы по тегам:

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