RussianLDP Рейтинг@Mail.ru
WebMoney: 
WMZ Z294115950220 
WMR R409981405661 
WME E134003968233 
Visa 
4274 3200 2453 6495 

Small. Fast. Reliable.
Choose any three.

SQLite C Interface

Последняя вставка Rowid

sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);

У каждого входа в большинстве таблиц SQLite (кроме таблиц WITHOUT ROWID) есть уникальный 64-битный ключ целого числа со знаком, названный "rowid". rowid всегда доступен как необъявленная колонка под названием ROWID, OID или _ROWID_, пока те имена также не используются явно заявленными колонками. Если у таблицы есть колонка типа INTEGER PRIMARY KEY, она другой псевдоним для rowid.

Интерфейс sqlite3_last_insert_rowid(D) обычно возвращает rowid нового успешного INSERT в rowid-таблицу или виртуальную таблицу на соединении с базой данных D. Вставки в таблицы WITHOUT ROWID не зарегистрированы. Если никакой успешный INSERT в rowid-таблицы никогда не происходил на соединении с базой данных D, то sqlite3_last_insert_rowid(D) возвращает ноль.

Кроме автоматической установки, когда строки вставляются в таблицы базы данных, значение, возвращенное этой функцией, может быть установлено явно через sqlite3_set_last_insert_rowid().

Некоторые виртуальные внедрения таблицы могут вставить строки в rowid-таблицы как часть совершения транзакции (например, сбросить данные, накопленные в памяти, на диск). В этом случае последующие вызовы этой функции возвращают rowid, связанный с этими внутренними операциями INSERT, который приводит к неинтуитивным результатам. Виртуальные внедрения таблицы, которые действительно пишут rowid-таблицы таким образом, могут избежать этой проблемы, восстановив первоначальное значение rowid, используя sqlite3_set_last_insert_rowid() перед возвращением контроля пользователю.

Если INSERT произойдет в триггере, то это возвратит rowid вставленной строки, пока триггер работает. Как только он заканчивается, значение, возвращенное этим кодом, возвращается к тому, чем это было, прежде чем триггер был запущен.

INSERT, который терпит неудачу из-за ограничительного нарушения, не является успешным INSERT и не изменяет значение, возвращенное этой функцией. Таким образом, INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK и INSERT OR ABORT не вносят изменения в возвращаемое значение этого установленного порядка, когда их вставка терпит неудачу. Когда INSERT OR REPLACE сталкивается с ограничительным нарушением, он не терпит неудачу. INSERT продолжается к завершению после удаления строк, которые вызвали ограничительную проблему, так что INSERT OR REPLACE будет всегда изменять возвращаемое значение этого интерфейса.

В целях этого установленного порядка INSERT считается успешным, даже если это впоследствии отменено.

Эта функция доступна для SQL-операторов через SQL-функцию last_insert_rowid().

Если отдельный поток выполняет новый INSERT на том же самом соединении с базой данных, в то время как sqlite3_last_insert_rowid() работает и таким образом изменяет последнюю вставку rowid, то значение, возвращенное sqlite3_last_insert_rowid(), непредсказуемо и не могло бы равняться старому или новой последней вставке rowid.