Каков наилучший способ получить значение auto-id в том же SQL с помощью SELECT?
Форум сказал, добавив это: « ; has Return Scope_Identity()
»
в конце SQL работает в ASP.
Есть ли соответствующий способ в PHP?
Это зависит от вашего сервера базы данных. Используя MySQL, вызовите mysql_insert_id()
сразу после вашего запроса на вставку. Используя PostgreSQL, сначала запрос « select nextval(seq)
» в последовательности и включите ключ в ваш запрос на вставку.
Запрос « select max(id) + 1 from tbl
» может завершиться неудачно, если другой запрос вставляет запись одновременно.
В postgres лучший способ – сделать что-то вроде:
insert into foos(name) values ('my_foo') returning id;
Это зависит от используемого вами механизма базы данных. В некоторых СУБД, например Firebird , есть предложение 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, вы можете использовать этот EDIT:
SELECT LAST_INSERT_ID(`1`) + 1 FROM table
Будьте очень осторожны: очевидно, select nextval (seq) не работает в высоком параллелизме – какое-то другое соединение может вставляться между временем, когда вы вставили, и временем, когда вы вызывали select nextval (seq). Всегда проверяйте такой код в жгутах с высокой параллельной проверкой.
В SQL Server вставка, использующая оператор select, может содержать предложение вывода, которое вернет значение идентификатора и любые другие столбцы, которые могут потребоваться для идентификации того, какая личность относится к какой записи. Если вы используете предложение values, используйте select scope_identity () сразу после вставки.