10
votes

Accéder à l'ID d'insertion MySQL pendant l'insert

Y a-t-il un moyen d'accéder à l'ID de l'incrément automatique pour une utilisation à l'intérieur de la requête.

Par exemple, WordPress met l'identifiant de l'insert dans le GUID de la même ligne, est-ce que je peux accéder à l'ID que la ligne prendra lors de l'insertion.

ou peut-être qu'il y a un moyen rapide pour moi de savoir ce que le compteur AI actuel est à ce sujet, je sais donc ce que l'un qui se passe sera?

J'en ai besoin parce que j'essaie de remettre la table des poteaux WP dans un nouveau type de post personnalisé que j'utilise et je dois avoir l'identifiant de l'insert à mettre à l'intérieur de la colonne GUID.


1 commentaires

Par exemple "Insérer dans le tableau (ID, Nom, adresse, Auto_Val) Valeurs (NULL, 'JOHN', '10 SYCAMORE LANE', 'MYSQL Auto_Increment')"


7 Réponses :


0
votes

Je suppose que vous voulez une sorte de colonne de la même valeur que l'ID utilisateur. Mais pourquoi devriez-vous faire ça? Il suffit d'utiliser l'ID utilisateur, même si vous l'utilisez, par exemple comme référence.


0 commentaires

1
votes

Peut-être que la fonction mysql last_insert_id () peut vous aider. http://dev.mysql.com /doc/refman/5.0/fr/information-fonctions.htm#function_last-insert-id


5 commentaires

Will Last_Insert_ID () renvoie l'ID de la ligne actuellement insérée?


Ça ne sera pas. Il retournera la première carte d'identité insérée à l'aide de la dernière requête d'insertion.


Bien. Last_insert_id () + 1 donne le nouvel identifiant d'insertion :)


@Radoslav Georgiev: ne fais jamais ça. Vous n'avez aucune garantie que d'autres connexions n'avaient pas inséré de nouvelles lignes debout (last_insert_id () fonctionne par connexion). Sans parler, cela pourrait être l'identifiant d'une autre table. Dernier point mais non le moindre, le serveur peut être configuré sur plus de 1 ID d'incrément.


@MHCL, merci pour le conseil;) Cette solution ne viendra même pas à l'esprit mais cela semblait être un choix. (mauvais choix)



-3
votes

J'ai fini par tirer simplement la dernière pièce d'identité comme: xxx


5 commentaires

C'est mauvais. D'autres connexions pourraient insérer des lignes entre votre sélection et votre insertion, sauf si vous verrouillez la table.


Cela vous fera probablement des problèmes à long terme car une alessandro indique


Vous avez raison, mais j'avais besoin de cela pour une requête unique pour insérer d'anciennes données dans une nouvelle base de données avant que le site soit en direct, donc aucun problème.


Cette réponse n'est pas différente de toutes les réponses Last_Insert_id d'en haut et pourtant vous avez choisi celui-ci? Pourquoi?


Utilisez last_insert_id (). En fonctionnement normal, il n'y a aucun problème à cela.



0
votes

afaik, vous ne pouvez pas accéder à la valeur Auto_Increment d'une ligne insérée. Je suggère d'insérer la ligne, puis de lire son identifiant et de la mettre à jour pour remplir les champs dont vous avez besoin pour connaître l'identifiant.

(Pourquoi avez-vous besoin de cela? Il semble que votre base de données a besoin d'une certaine normalisation, si vous avez un problème de poulet d'œufs.)


0 commentaires

-1
votes
use mysql_insert_id() to get last inserted id
You can see more information at:
http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

1 commentaires

Il demande un moyen de lire et d'utiliser l'ID de la ligne d'être inséré avec la requête en cours. Insert dans les valeurs de tableau (last_insert_id ()) ne fonctionnera pas.



0
votes

C'est une façon de le faire. Cela a fonctionné pour moi:

1) Il suffit d'exécuter 2 requêtes mysql distinctes. Le premier insère les valeurs de poteau dans la table WP_POSTS. Vous devez insérer dans toutes les colonnes sauf dans la colonne "GUID" Insérer un espace réservé, comme "0".

2) La seconde requête est exécutée juste après la première et ici, vous pouvez appeler le last_insert_id () fonction pour obtenir le vrai identifiant d'insertion de la requête précédente. Cette deuxième requête met à jour le champ "GUID" avec le bon numéro d'identifiant.

Vous pouvez l'insérer dans la boucle pour l'insertion de masse des poteaux WP du fichier CSV par exemple.

< Fort> Vous devriez le faire lorsque le site est hors ligne ou verrouille d'abord les tables, donc aucune autre demande de requête ne se situe entre la forme ailleurs.

Exemple: 1ère requête (désolé pour la colonne (désolé pour la colonne formatage mais il est plus facile de déboguer): xxx

2e requête: xxx

... aussi, quand vous êtes En boucle à travers de nombreux inserts, il peut parfois maximiser le temps d'exécution maximal autorisé pour le script PHP et le téléchargement est interrompu. Il aide à utiliser set_time_limit (0); Tout au long du script, le compteur de temps maximum autorisé max est régulièrement réinitialisé.

... espérons que cela aide :)


3 commentaires

Cela fonctionne-t-il toujours si quelqu'un d'autre insère une rangée avant que la deuxième requête s'exécute? Je ne voudrais pas mettre à jour accidentellement la ligne après ce que je voulais.


..no, ça ne devrait pas. Mais les chances d'une autre requête entre entre les deux parties de ce script sont exécutées à partir du même fichier sont minces. Toutefois sur des systèmes de trafic élevés, je suggérerais de la définir hors ligne pour le temps de la mise à jour ou si vous utilisez Inno DB, puis au moins le verrouillez-le.


J'avais besoin de cela dans un but différent, bien que je réalise que ma logique de code était un peu paradoxal et j'ai opté pour une approche différente (probablement mieux).



0
votes

Peut-être que vous pourriez utiliser auto_incrènement de votre table dans informations_schema.tables dans un insert ... Sélectionnez Query. Dans la théorie insert ... Sélectionnez doit verrouiller Information_schema.tables et Auto_Increment La valeur doit être l'ID qui est utilisé pour la prochaine insérer < / code>. Mais vous devriez difficilement tester cela et envisager des problèmes de performance.


0 commentaires