SQL - ВСТАВКА и получение значения автоматического увеличения идентификатора
-
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 () сразу после вставки.