Pergunta

O que é a melhor maneira de obter o valor de auto-id no mesmo SQL com um SELECT?

Um fórum disse adicionando este
"; has Return Scope_Identity()" no final dos trabalhos de SQL em ASP.

Existe uma maneira correspondente no PHP?

Foi útil?

Solução

Depende do seu servidor de banco de dados. Usando MySQL, chamar mysql_insert_id() imediatamente após a sua consulta de inserção. Usando PostgreSQL, primeira consulta " select nextval(seq) " na sequência e incluem a chave em sua consulta de inserção.

Consultando para "select max(id) + 1 from tbl" pode falhar se outra solicitação insere um registro ao mesmo tempo.

Outras dicas

Em postgres a melhor maneira é fazer algo como:

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

Depende do motor de banco de dados você está usando. Alguns DBMS, como cláusula Firebird por exemplo, RETORNANDO você pode adicionar à sua consulta. Por exemplo, se você tem uma tabela chamada Tabela1 com coluna autoincrement chamado ID, você pode usar isto:

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

E seria devolver o ID inserido como uma instrução select regular.

Em Microsoft Transact SQL você pode usar @@ IDENTITY.

por exemplo.

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

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

ou

Se você quisesse genterate o número do seu mySql consulta seleção, você poderia usar este EDIT:

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 

Tenha muito cuidado: Aparentemente selecionar nextval (seq) não funciona em alta concorrência - alguma outra conexão pode inserir entre o momento em que você inserido e o momento em que você chamou selecionar nextval (seq). Sempre testar esse código em equipamentos de teste de alta concorrência.

No SQL Server uma inserção usando a instrução select pode ter uma cláusula de saída que irá retornar o valor de identidade e qualquer outro colunas poderá ser necessário identificar qual a identidade vai para qual registro. Se você estiver usando uma cláusula de valores, em seguida, usar select SCOPE_IDENTITY () imediatamente após a inserção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top