• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Определение Id при добавлении строки

  • Автор темы Samuel
  • Дата начала
S

Samuel

Здравствуйте.
Есть таблица, в которой поле "ID" является первичным ключом и автоинкрементируется. Как при добавлении новой записи в эту таблицу узнать ID, который будет у этой строки ?
 
O

Over

После вставки делай запрос к таблице: SELECT max(ID) FROM MY_TABLE.
Полученное значение - и будет твой IDшник.
 
V

vital

После вставки делай запрос к таблице: SELECT max(ID) FROM MY_TABLE.
Полученное значение - и будет твой IDшник.
Сакс прав, не обязательно. Ведь может присвоится и какой-нить из свободных, если были удаления.
Что бы знать точно надо знать какая бд и как вставляют=)
Samuel
А еще есть LAST_INSERT_ID() в Mysql и ей подобные в других бд..
 
O

Over

Если СУБД нормальная, и есть такой объект, как счётчик, и у него делается автоинкремент, тогда всё будет работать нормально.
А если при вставке присваивается не ID+1, а какой-нибудь свободный, тогда нужно настроить гарантированный автоинкремент, или использовать другую СУБД.
 
V

vital

тогда нужно настроить гарантированный автоинкремент, или использовать другую СУБД.
Не поверите, но очень часто так бывает, что напорядок лучше заполнять дырки в счетчике, чем наращивать его. А вывод - менять субд вообще ересь.
 
?

????

что за СУБД?

часто достаточно использовать конструкцию
[sql]insert .... returning ...[/sql]

глянь тут
 
?

????

sax_ol
смысл есть, но ты не можешь его уловить. а жаль )
 
S

Samuel

Ну СУБД MS SQL Server.
Разобрался. В пределах хранимки лучше использовать функцию SCOPE_IDENTITY(), которая и вернет нужный ID.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!