2012-08-12 5 views
4

Quelle est la fiabilité de mysql_insert_id() dans un état concurrentiel? Je veux dire que lorsque plusieurs utilisateurs insèrent des données en même temps, cette fonction renverra-t-elle l'ID réel ou elle renverra l'ID de données inséré par l'autre utilisateur?Problème mysql_insert_id dans l'insertion de données de concurrence

Le moteur de table est MyISAM.

Répondre

4

mysql_insert_id est complètement multi-utilisateurs.Il repose entièrement sur la connexion à la base de données, et vous ne pouvez avoir qu'un seul utilisateur par connexion .... Donc, selon votre question, il renvoie true id ....

de MySql documentation,

l'identifiant qui a été généré est maintenu dans le serveur sur un chaque connexion. Cela signifie que la valeur renvoyée par la fonction à un client donné est la première valeur AUTO_INCREMENT générée pour l'instruction la plus récente affectant une colonne AUTO_INCREMENT par ce client . Cette valeur ne peut pas être affectée par d'autres clients, même s'ils génèrent leurs propres valeurs AUTO_INCREMENT. Ce comportement garantit que chaque client peut récupérer son propre ID sans se préoccuper de l'activité d'autres clients et sans avoir besoin de verrous ou de transactions .

0

même lorsque plusieurs utilisateurs insèrent .. il sera séquentiel dans l'exécution de votre programme.

de php.net

"mysql_insert_id() agit sur la dernière requête effectuée, veillez à appeler mysql_insert_id() immédiatement après la requête qui génère la valeur."

Aussi

L'utilisation de cette extension est décourager ré. Au lieu de cela, l'extension MySQLi ou PDO_MySQL doit être utilisée. Voir aussi MySQL: choisir un guide d'API et une FAQ associée pour plus d'informations. Les alternatives à cette fonction sont les suivantes:

mysqli_insert_id() 
PDO::lastInsertId() 

vous pouvez également vérifier ce link from dev.mysql où il est dit que

« La valeur de mysql_insert_id() est affectée que par les déclarations émises dans le cadre actuel du client Il n'est pas affecté. par des déclarations émises par d'autres clients. "