SQL - ВСТАВКА и получение значения автоматического увеличения идентификатора

StackOverflow https://stackoverflow.com/questions/621369

  •  05-07-2019
  •  | 
  •  

Вопрос

Каков наилучший способ получить значение auto-id в том же SQL с помощью SELECT?

На форуме было сказано , добавив следующее "; has Return Scope_Identity()"
в конце концов SQL работает в ASP.

Есть ли соответствующий способ в PHP?

Это было полезно?

Решение

Это зависит от вашего сервера базы данных.Используя MySQL, вызовите mysql_insert_id() сразу после вашего запроса insert.Используя PostgreSQL, первый запрос "select nextval(seq)" выберите последовательность и включите ключ в свой запрос insert.

Запрос на "select max(id) + 1 from tbl" может произойти сбой, если другой запрос вставит запись одновременно.

Другие советы

В postgres лучший способ - это сделать что-то вроде:

insert into foos(name) values ('my_foo') returning id;

Это зависит от используемого вами ядра базы данных.Некоторые СУБД, такие как Жар - птица например, предложение have RETURNING вы можете добавить к своему запросу.Например, если у вас есть таблица с именем TABLE1 и автоинкрементным столбцом с именем ID, вы можете использовать это:

insert into TABLE1(columns...) values (values...) returning ID;

И это вернет вставленный идентификатор точно так же, как обычный оператор select.

В Microsoft Transact SQL вы можете использовать @@IDENTITY .

например ,

DECLARE @Table TABLE ( col0 INT IDENTITY, col1 VARCHAR(255), col2 VARCHAR(255))

INSERT INTO @Table (col1, col2) VALUES ('Hello','World!')

SELECT @@Identity

SELECT * FROM @Table

В php:mysql_insert_id() http://us3.php.net/mysql_insert_id

или

Если вы хотите сгенерировать число из вашего запроса MySQL select, вы могли бы использовать это Редактировать:

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 

Будь очень осторожен:Очевидно, что select nextval (seq) не работает при высоком параллелизме - какое-то другое соединение может быть вставлено между моментом, когда вы вставили, и временем, когда вы вызвали select nextval (seq).Всегда тестируйте такой код в тестовых системах с высоким уровнем параллелизма.

В SQL Server вставка, использующая оператор select, может иметь предложение output, которое вернет значение identity и любые другие столбцы, которые вам могут понадобиться, чтобы определить, какой идентификатор относится к какой записи.Если вы используете предложение values, то используйте select scope_identity () сразу после вставки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top