Pregunta

¿Estoy en lo cierto al entender que la función LAST_INSERT_ID() de MySQL no se restablece entre intentos de inserción (como lo hace @@identity en sql-server)...que si la operación de inserción inmediatamente anterior falla, LAST_INSERT_ID() devolverá el pk de cualquier pk de la última inserción de esa conexión a cualquier tabla con una clave primaria de incremento automático era.Y si estoy en lo cierto, ¿no parece el comportamiento más retrasado para esta función que se pueda imaginar?¿No existe ninguna función de MySQL que se comporte de manera similar a la identidad @@ del servidor SQL?Uno que devolverá NULL si el inmediatamente precedente ¿El intento de inserción no crea ningún registro nuevo?Alternativamente, ¿cómo se puede saber con certeza la clave principal de la operación de inserción más reciente?

¿Fue útil?

Solución

@@ identidad es generalmente mal en el servidor SQL, así. Debería utilizar scope_identity() en la mayoría de los casos en su lugar.

En MySQL, LAST_INSERT_ID () debe ser seguro de utilizar porque la única forma en que puede llamar a esta función después de un error de inserción es que ya ha cogido y representaron el error de inserción correctamente. De lo contrario, seguiría siendo el procesamiento de comandos. En otras palabras, LAST_INSERT_ID () no es su mecanismo de control de errores.

Otros consejos

Usted tiene que comprobar para ver si la inserción tuvo éxito por primera vez. Si la inserción tuvo éxito, entonces usted puede confiar en LAST_INSERT_ID ().

editar: en php:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db('mydb');

mysql_query('<PUT YOUR INSERT HERE');
if(mysql_affected_rows()>0){
  $last_id=mysql_insert_id();
}else{
  //panic!
}
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top