Pregunta

¿Cuál es la mejor manera de obtener el valor de identificación automática en el mismo SQL con un SELECT?

Un foro dijo agregando esto " ; tiene Return Scope_Identity () "
al final del SQL funciona en ASP.

¿Hay alguna forma correspondiente en PHP?

¿Fue útil?

Solución

Depende de su servidor de base de datos. Con MySQL, llame a mysql_insert_id () inmediatamente después de su consulta de inserción. Utilizando PostgreSQL, primera consulta " select nextval (seq) " en la secuencia e incluya la clave en su consulta de inserción.

Consultando " select max (id) + 1 from tbl " podría fallar si otra solicitud inserta un registro simultáneamente.

Otros consejos

En postgres, la mejor manera es hacer algo como:

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

Depende del motor de base de datos que esté utilizando. Algunos DBMS, como Firebird , por ejemplo, tienen una cláusula RETURNING que puede agregar a su consulta. Por ejemplo, si tiene una tabla llamada TABLE1 con una columna de autoincremento llamada ID, puede usar esto:

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

Y devolvería la ID insertada como una instrucción de selección normal.

En Microsoft Transact SQL puede usar @@ IDENTITY.

por ejemplo

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

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

o

Si desea ordenar el número de su consulta de selección mySql, puede usar esto EDIT:

SELECT LAST_INSERT_ID(`1`) + 1 FROM table 

Tenga mucho cuidado: aparentemente select nextval (seq) no funciona en alta concurrencia; se puede insertar alguna otra conexión entre el momento en que lo insertó y el momento en que llamó select nextval (seq). Siempre pruebe dicho código en arneses de prueba de alta concurrencia.

En SQL Server, una inserción que usa la instrucción select puede tener una cláusula de salida que devolverá el valor de identidad y cualquier otra columna que pueda necesitar para identificar qué identidad va a qué registro. Si está utilizando una cláusula de valores, use select scope_identity () inmediatamente después de la inserción.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top