Короткий ответ: Поле, объявленное как INTEGER PRIMARY KEY будет автоматически увеличиваться.
А вот длинный ответ: Если вы объявили поле таблицы как INTEGER PRIMARY KEY, то при вводе вами в это поле NULL, этот NULL автоматически преобразуется в целое число которое на единицу больше чем самое большое число в этой колонке для всех строк данной таблицы, или 1 если таблица пуста, (Если наибольший целый ключ равен 9223372036854775807, тогда не задействованное значение ключа выбирается случайным образом) Например, предположим у вас есть таблица, подобная вот такой:
Обратите внимание на то, что ключ как целое число должен быть больше, чем самое большое число уже введенное в это поле таблицы. Новый ключ должен быть уникальным среди ключей уже записанных в базу, но может уже пересекаться с ключами, удаленными из таблицы. Что бы в данном поле создавался уникальный ключ в течении времени жизни таблицы, добавьте к описанию поля INTEGER PRIMARY KEY ключевое слово AUTOINCREMENT. Выбранный ключ должен быть больше, чем самый большой ключ уже записанный в эту таблицу. Если это поле уже содержит ключ, равный или больше добавляемому, то INSERT закончится аварийно с кодом ошибки SQLITE_FULL.
А вот длинный ответ: Если вы объявили поле таблицы как INTEGER PRIMARY KEY, то при вводе вами в это поле NULL, этот NULL автоматически преобразуется в целое число которое на единицу больше чем самое большое число в этой колонке для всех строк данной таблицы, или 1 если таблица пуста, (Если наибольший целый ключ равен 9223372036854775807, тогда не задействованное значение ключа выбирается случайным образом) Например, предположим у вас есть таблица, подобная вот такой:
Существует функция sqlite3_last_insert_rowid(). Она вернет целый ключ для последней удачной операции вставки.Тогда предложение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);
Обратите внимание на то, что ключ как целое число должен быть больше, чем самое большое число уже введенное в это поле таблицы. Новый ключ должен быть уникальным среди ключей уже записанных в базу, но может уже пересекаться с ключами, удаленными из таблицы. Что бы в данном поле создавался уникальный ключ в течении времени жизни таблицы, добавьте к описанию поля INTEGER PRIMARY KEY ключевое слово AUTOINCREMENT. Выбранный ключ должен быть больше, чем самый большой ключ уже записанный в эту таблицу. Если это поле уже содержит ключ, равный или больше добавляемому, то INSERT закончится аварийно с кодом ошибки SQLITE_FULL.
Комментариев нет:
Отправить комментарий