Ok, alors disons que je fais un mysql INSERT
dans une de mes tables et la table a la colonne item_id
qui est définie sur autoincrement
et primary key
.
Comment puis-je obtenir la requête pour générer la valeur de la clé primaire nouvellement générée item_id
dans la même requête?
Actuellement, j'exécute une deuxième requête pour récupérer l'id, mais cela ne semble pas être une bonne pratique, car cela pourrait produire le mauvais résultat ...
Si cela n'est pas possible, quelle est la meilleure pratique pour garantir que je récupère l'identifiant correct?
mysql
insert
key
auto-increment
Amy Neville
la source
la source
INSERT
requête comme celle-ci; pourquoi pensez-vous que cela pourrait produire un mauvais résultat?Réponses:
Vous devez utiliser la
LAST_INSERT_ID()
fonction: http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-idPar exemple:
Cela vous ramènera la
PRIMARY KEY
valeur de la dernière ligne que vous avez insérée:Par conséquent, la valeur renvoyée par
LAST_INSERT_ID()
est par utilisateur et n'est pas affectée par les autres requêtes qui pourraient s'exécuter sur le serveur à partir d'autres utilisateurs .la source
PRIMARY KEY
valeur de la dernière ligne que vous avez insérée, car c'est par connexion - chaque connexion au serveur conservera sa propre valeur pour cela. J'ai mis à jour la réponse pour clarifier cela.IL FAUT SE MÉFIER !! de "LAST_INSERT_ID ()" si vous essayez de renvoyer cette valeur de clé primaire dans PHP.
Je sais que ce fil n'est pas étiqueté php, mais pour tous ceux qui sont tombés sur cette réponse qui cherchent à renvoyer un identifiant d'insertion MySQL à partir d'un insert PHP scripté en utilisant des appels mysql_query standard - cela ne fonctionnera pas et n'est pas évident sans capturer des erreurs SQL.
Le nouveau mysqli prend en charge plusieurs requêtes - dont LAST_INSERT_ID () est en fait une deuxième requête de l'original.
IMO un SELECT distinct pour identifier la dernière clé primaire est plus sûr que la fonction facultative mysql_insert_id () retournant l'ID AUTO_INCREMENT généré à partir de l'opération INSERT précédente.
la source
LAST_INSERT_ID
est une fonction MySQL par connexion. Si vous recherchez le dernier ID d'insertion, il est possible qu'une connexion distincte ait effectué une écriture et que vous ayez le mauvais ID.mysql_insert_id()
fonctionne également par connexion, mais il souffre également d'un comportement étrange comme on le voit ici stackoverflow.com/a/897374/1305910 dans le commentaire de Cliffordlife - nevermind nous aurions tous dû utilisermysqli
De la
LAST_INSERT_ID()
documentation:C'est-à-dire que si vous avez deux requêtes distinctes pour le script simultanément, elles n'affecteront pas les unes des autres
LAST_INSERT_ID()
(sauf si vous utilisez une connexion persistante peut-être).la source
Voici ce que vous cherchez !!!
C'est la meilleure alternative de
SCOPE_IDENTITY()
fonction utilisée dansSQL Server
.Vous devez également garder à l'esprit que cela ne fonctionnera que s'il
Last_INSERT_ID()
est renvoyé par votreInsert
requête. Autrement dit, la requête renvoie l'ID inséré dans le schéma. Vous ne pouvez pas obtenir le dernier identifiant inséré d'une table spécifique.Pour plus de détails, veuillez consulter le lien L'équivalent de la fonction SQLServer SCOPE_IDENTITY () dans mySQL?
la source
Si vous avez besoin de la valeur avant d'insérer une ligne:
Vous pouvez l'utiliser dans un encart:
la source
Vous recevrez ces paramètres sur le résultat de votre requête:
C'est
insertId
exactement ce dont vous avez besoin.(NodeJS-mySql)
la source
Si en python en utilisant pymysql, à partir du curseur, vous pouvez utiliser cursor.lastrowid
la source
utilisez simplement "$ last_id = mysqli_insert_id ($ conn);"
la source
Si vous utilisez PHP: Sur un objet PDO , vous pouvez simplement appeler la méthode lastInsertId après votre insertion.
Sinon, avec un LAST_INSERT_ID, vous pouvez obtenir la valeur comme ceci:
SELECT LAST_INSERT_ID();
la source
j'ai utilisé
return $this->db->insert_id();
pour Codeigniterla source
Je veux juste partager mon approche à ce sujet en PHP, certains d'entre vous ont peut-être trouvé que ce n'était pas un moyen efficace, mais c'est 100 fois mieux que les autres options disponibles.
générer une clé aléatoire et l'insérer dans le tableau en créant une nouvelle ligne. vous pouvez ensuite utiliser cette clé pour récupérer la clé primaire. utilisez la mise à jour pour ajouter des données et faire d'autres choses.
cela permet de sécuriser une ligne et d'avoir la bonne clé primaire.
Je ne le recommande vraiment que si vous n'avez pas d'autres options.
la source