J'insère quelques mots dans un tableau à deux colonnes avec cette commande:
INSERT IGNORE INTO terms (term) VALUES ('Word1'), ('Word2'), ('Word3');
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?
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".
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()
.
Ça ne marchera pas. Là, vous devez interroger les ID après l'insertion.
Pourquoi pas seulement:
SELECT ID
FROM terms
WHERE term IN ('Word1', 'Word2', 'Word3')
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.