Получение следующего доступного автонумерации

Я занят школьным проектом, где я запрашиваю базу данных на основе сервера от клиента. Одним из требований является получение следующего доступного AutoNumber из базы данных.

Каким должен быть SQL-запрос для получения следующего доступного Autonumber? Можно ли сделать это?


person Arianule    schedule 04.03.2012    source источник


Ответы (4)


Это зависит от вкуса СУБД. В MariaDB (MySQL) есть функция LAST_INSERT_ID(), которая дает вам последнее значение поля AUTO_INCREMENT.

Базы данных, поддерживающие последовательности (скажем, Ingres), позволяют получить следующее значение примерно так:

SELECT NEXT VALUE FOR some_sequence;

or

SELECT some_sequence.NEXTVAL;
person DejanLekic    schedule 04.03.2012
comment
Спасибо, но я забыл упомянуть... базу данных в MSAccess. Будет ли работать аналогичный запрос? - person Arianule; 04.03.2012
comment
Я никогда не пользовался M$ Access, но обнаружил, что он имеет: IDENT_CURRENT('table_name') — эта функция, по-видимому, дает вам последний идентификатор последней вставленной записи в таблицу... - person DejanLekic; 04.03.2012

Следующий автонумерация не совпадает с последней автонумерацией +1. Если записи были удалены, следующий возможный автонумерация может быть значительно выше, чем предыдущая. Также возможно получить отрицательные автономера с помощью MS Access. Как показывает Аллен Браун, вы можете использовать ADOX для получения начального свойства столбца автонумерации, который является следующим автономером.

person Fionnuala    schedule 04.03.2012

Если это Oracle, запустите приведенный ниже запрос, используя JDBC.

SELECT YOUR_SEQUENCE.NEXTVAL FROM DUAL
person Zaki    schedule 04.03.2012

Лучшее решение — вставить запись, затем получить сгенерированные ключи, а затем откатить транзакцию. Он работает со всеми базами данных с поддержкой транзакций и автоматической нумерации.

person Amir Pashazadeh    schedule 04.03.2012
comment
Проблема в том, что если вы находитесь в многопользовательской среде, нет никакой гарантии, что кто-то еще не вставит запись между тем, когда вы выполняете эту операцию, и тем, когда вы фактически вставляете запись. - person ChrisPadgham; 05.03.2012
comment
Нет проблем, вам нужен уникальный номер, и вы его получите. - person Amir Pashazadeh; 05.03.2012
comment
Существует проблема. Вы откатываете транзакцию. Ваш номер теперь принадлежит кому-то другому. Я действительно не вижу смысла в получении следующего автономера, потому что независимо от того, как вы его получите, он может исчезнуть к тому моменту, когда он вам понадобится. - person Fionnuala; 06.03.2012