У меня тож такая задача была. И сколько я не изучал разные мануалы, статьи и хэлпы по БД, я не нашел такой функции. Т.е. вроде, можно и брать максимальный ID сразу после вставки, но тут могут возникнуть проблемы, и этот способ не подходит.
Я остановился на таком методе (хоть он и не сильно хорош по производительности):
В моем случае было так, что если я делаю одну новую вставку в таблицу, то она уже уникальна (т.е. пять столбцов, и хотя бы один обязательно будет уникальным), т.е. если потом сделать выборку по условиям только-что вставленных значений, то это и будет именно та запись, которая была вставлена.
Но вот Вы указали, что язык программирования Java. И вот в Java есть некоторые замечательные (хоть и сложные из-за большой своей функциональности) фрэймворки, которые полностью на себя берут взаимодействие с базой данных. А именно до той степени, что БД остается ТОЛЬКО хранилищем информации, и все. А бизнес-логика самой программы уже берет на себя ответственность за генерацию уникального ID, вставку, выборку и т.д. Вот два одних из самых известных: EJB JPA
, и еще Spring
. Такой подход находят хорошим многие программисты.
Мне видится еще один выход:
Как я понял, то, что Вы написали
Интересует именно значение счётчика (оно отображает реальное количество добавленных записей в базу данных), а не id последней записи.
дак это то, что БД ставит уникальный ID в зависимости от количества уже присутствующих в БД записей. Ну, если это так, то :
Так как добавление новой записи в таблицу занимает очень мало времени, то ради хорошей и качественной функциональности программы можно и сделать так:
- Когда ставится новая запись в БД, делать запрещение любых транзакций с таблицей (или со связанными таблицами, если это важно), кроме чтения;
- Пытаться ставить новую запись:
1 - вычислить количество записей,
2-вставить запись с id=количество записей+1;
3-сохранить этот ID для дальнейших нужд;
- При любой ошибке и при любом завершении транзакции, делать дальнейшее разрешение изменений в таблице.
Не могу сказать сейчас откуда я этот способ прочитал, но была книга "умной".