Pregunta

En mysql, ¿cómo obtengo la clave principal utilizada para una operación de inserción, cuando se autoincrementa?

Básicamente, quiero que se devuelva el nuevo valor autoincrementado cuando se complete la declaración.

¡Gracias!

¿Fue útil?

Solución

Su comentario de aclaración dice que está interesado en asegurarse de que LAST_INSERT_ID () no dé el resultado incorrecto si ocurre otro INSERT concurrente. Tenga la seguridad de que es seguro usar LAST_INSERT_ID () independientemente de otra actividad concurrente. LAST_INSERT_ID () solo devuelve la ID más reciente generada durante la sesión actual.

Puedes probarlo tú mismo:

  1. Abre dos ventanas de shell, ejecuta mysql cliente en cada uno y conectarse a base de datos.
  2. Shell 1: INSERTAR en una tabla con un Clave AUTO_INCREMENT.
  3. Shell 1: SELECT LAST_INSERT_ID (), ver resultado.
  4. Shell 2: INSERTAR en la misma tabla.
  5. Shell 2: SELECT LAST_INSERT_ID (), ver el resultado diferente de la cáscara 1.
  6. Shell 1: SELECT LAST_INSERT_ID () de nuevo, ver una repetición de antes resultado.

Si lo piensas, esta es la única manera que tiene sentido. Todas las bases de datos que admiten mecanismos de clave de incremento automático deben actuar de esta manera. Si el resultado depende de una condición de carrera con otros clientes que posiblemente SE INSERTAN al mismo tiempo, no habría una manera confiable de obtener el último valor de ID insertado en su sesión actual.

Otros consejos

Los documentos de MySQL describen la función: LAST_INSERT_ID ()

[seleccione max (primary_key_column_name) from table_name] Ahhh no necesariamente. No soy un tipo de MySQL, pero hay una forma específica de obtener la última ID insertada para la última acción completada que es un poco más sólida que esta. ¿Qué sucede si ha ocurrido una inserción entre usted escribiendo en la tabla y consultándolo? Lo sé porque me picó hace muchas lunas (así que sí sucede). Si todo lo demás falla, lea el manual: http: // dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

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