Question

Suis-je comprendre que la fonction de MySQL LAST_INSERT_ID () ne réinitialise pas entre les tentatives d'insertion (comme @@ identity fait dans sql-server) ... que si l'opération d'insertion précédent échoue, LAST_INSERT_ID () retournera le pk quel que soit le pk de dernier insert de cette connexion à any table avec une clé primaire auto-incrémentée était. Et si je ne me trompe pas, cela ne semble pas à peu près le comportement le plus retardé pour cette fonction que l'on pourrait trouver? Yat-il pas de fonction MySQL qui se comporte de façon similaire à l'identité de @@ sql-server? Celui qui retournera NULL si le précédant immédiatement insérer tentative ne crée aucun nouveau record? Sinon, comment peut-on savoir avec certitude la clé primaire de la plus récente opération d'insertion?

Était-ce utile?

La solution

@@ l'identité est généralement faux dans le serveur SQL ainsi. Vous devez utiliser scope_identity() dans la plupart des cas à la place.

Dans MySql, LAST_INSERT_ID () devrait être sûr à utiliser parce que la seule façon que vous pouvez appeler cette fonction après une erreur d'insertion est que vous avez déjà pris correctement et RÉFÉRENCIÉS l'erreur d'insertion. Sinon, vous auriez encore le traitement des commandes. En d'autres termes, LAST_INSERT_ID () n'est pas votre mécanisme de gestion des erreurs.

Autres conseils

Vous devez vérifier si l'insert a réussi d'abord. Si l'insert a réussi, vous pouvez compter sur LAST_INSERT_ID ().

edit: 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!
}
?>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top