web-dev-qa-db-fra.com

Comment obtenir l'ID de plusieurs lignes insérées dans MySQL?

J'insère quelques mots dans un tableau à deux colonnes avec cette commande:

INSERT IGNORE INTO terms (term) VALUES ('Word1'), ('Word2'), ('Word3');
  1. Comment puis-je obtenir l'ID (clé primaire) de la ligne dans laquelle chaque mot est inséré. Je veux dire retourner une valeur comme "55,56,57" après avoir exécuté INSERT. MySQL a-t-il une telle réponse?

  2. Le terme colonne est UNIQUE. Si un terme existe déjà, MySQL ne l'insérera pas. Est-il possible de renvoyer la référence de cette duplication (c'est-à-dire l'ID de la ligne dans laquelle le terme existe)? Une réponse comme "55, 12, 56".

36
Googlebot
  1. Vous l'obtenez via SELECT LAST_INSERT_ID(); ou via le fait que votre framework/bibliothèque MySQL (dans n'importe quelle langue) appelle mysql_insert_id() .

  2. Ça ne marchera pas. Là, vous devez interroger les ID après l'insertion.

35
glglgl

Pourquoi pas seulement:

SELECT ID
  FROM terms
 WHERE term IN ('Word1', 'Word2', 'Word3')
2
mellamokb

Tout d'abord, pour obtenir l'identifiant juste inséré, vous pouvez créer quelque chose comme:

SELECT LAST_INSERT_ID() ;

Attention, cela ne fonctionnera qu'après votre dernière requête INSERT et il retournera le premier ID uniquement si vous avez un insert multiple!

Ensuite, avec l'option IGNORE, je ne pense pas qu'il soit possible d'obtenir les lignes qui n'ont pas été insérées. Lorsque vous faites un INSERT IGNORE, vous dites simplement à MySQL d'ignorer les lignes qui devraient créer une entrée en double.

Si vous ne mettez pas cette option, le INSERT sera arrêté et vous aurez la ligne concernée par la duplication.

1
Nugget