Domanda

Qual è il modo migliore per ottenere il valore dell'ID automatico nello stesso SQL con un SELECT?

Un forum ha detto di aggiungere questo " ; ha Return Scope_Identity () "
alla fine dell'SQL funziona in ASP.

Esiste un modo corrispondente in PHP?

È stato utile?

Soluzione

Dipende dal tuo server di database. Utilizzando MySQL, chiama mysql_insert_id () immediatamente dopo la tua richiesta di inserimento. Utilizzando PostgreSQL, prima query " seleziona nextval (seq) " nella sequenza e includi la chiave nella tua query di inserimento.

Interrogazione per " seleziona max (id) + 1 da tbl " potrebbe non riuscire se un'altra richiesta inserisce un record contemporaneamente.

Altri suggerimenti

In Postgres il modo migliore è fare qualcosa del tipo:

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

Dipende dal motore di database che si sta utilizzando. Alcuni DBMS, come Firebird , ad esempio, hanno una clausola RETURNING che puoi aggiungere alla tua query. Ad esempio, se si dispone di una tabella denominata TABELLA1 con colonna di incremento automatico denominata ID, è possibile utilizzare questo:

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

E restituirebbe l'ID inserito proprio come una normale istruzione select.

In Microsoft Transact SQL è possibile utilizzare @@ IDENTITY.

per es.

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

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

o

Se si desidera modificare il numero dalla query mySql select, è possibile utilizzarlo Modifica

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 

Fai molta attenzione: a quanto pare selezionare nextval (seq) non funziona in alta concorrenza - alcune altre connessioni possono essere inserite tra l'ora in cui è stata inserita e l'ora in cui è stato chiamato select nextval (seq). Testare sempre tale codice in imbracature per test ad alta concorrenza.

In SQL Server un inserto che utilizza l'istruzione select può avere una clausola di output che restituirà il valore dell'identità e qualsiasi altra colonna potrebbe essere necessaria per identificare quale identità va a quale record. Se si utilizza una clausola dei valori, utilizzare select scope_identity () immediatamente dopo l'inserimento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top