Ответ 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.