понедельник, 20 января 2014 г.

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

Короткий ответ: Поле, объявленное как INTEGER PRIMARY KEY будет автоматически увеличиваться.

А вот длинный ответ: Если вы объявили поле таблицы как 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(). Она вернет целый ключ для последней удачной операции вставки.

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

Комментариев нет:

Отправить комментарий

X-Plane 11, 12 - любитель, Фото любитель со стажем

Постоянные читатели

Архив блога