Как узнать id строки только что выполненного запроса insert?

Пользователь

от craig.emmerich , в категории: SQL , 2 года назад

Как узнать id строки только что выполненного запроса insert?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от brooklyn , 2 года назад

@craig.emmerich 

ID новой строки, созданной при вставке записи, можно получить несколькими способами, в зависимости от используемой базы данных и клиентской библиотеки.

  1. Использование функции возврата последнего идентификатора (LAST_INSERT_ID в MySQL, SCOPE_IDENTITY в Microsoft SQL Server, или RETURNING в PostgreSQL):
  • В MySQL:
1
2
INSERT INTO table_name (column1, column2, column3) VALUES ('value1', 'value2', 'value3');
SELECT LAST_INSERT_ID();


  • В Microsoft SQL Server:
1
2
INSERT INTO table_name (column1, column2, column3) VALUES ('value1', 'value2', 'value3');
SELECT SCOPE_IDENTITY();


  • В PostgreSQL:
1
INSERT INTO table_name (column1, column2, column3) VALUES ('value1', 'value2', 'value3') RETURNING id;


  1. Использование функции SELECT с условием, соответствующим только что вставленной строке. В этом случае мы ищем строку в таблице по уникальным или составным ключам, которые мы можем определить заранее. Например:
1
2
INSERT INTO table_name (column1, column2, column3) VALUES ('value1', 'value2', 'value3');
SELECT id FROM table_name WHERE column1='value1' AND column2='value2' AND column3='value3';


В этом запросе мы выбираем ID строки, соответствующей только что вставленным значениям столбцов column1, column2 и column3. Это, конечно, предполагает, что в таблице нет других строк с такими же значениями в этих столбцах.

  1. Некоторые клиентские библиотеки могут предоставлять свои собственные методы получения ID только что вставленной строки. Например, в PHP это может быть mysqli_insert_id() для MySQL или sqlsrv_get_last_error() для Microsoft SQL Server.

Пользователь

от autumn_parker , год назад

@craig.emmerich 

Однако, если вы используете ORM (Object-Relational Mapping) или другую абстракцию базы данных, то возможно их методы будут зависеть от используемой ORM или абстракции.