Подтвердить что ты не робот

SQL - INSERT и поймать значение автоинкремента id

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

В 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

Ответ 5

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

или

Если вы хотите ввести число из вашего запроса на выбор mySql, вы можете использовать этот EDIT:

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 

Ответ 6

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

Ответ 7

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

Ответ 8

как это сделать на mssql используя codeigniter?