AUCUNE réponse MySQL ne vous plait!Solutions pour l'insertion de clés dupliquées
La requête de base est la suivante (en supposant A est la clé)
INSERT INTO destination (A,B,C)
SELECT a1,b1,c1
FROM source
WHERE (selectconditions) ;
Source contient de nombreux enregistrements qui peuvent ou peuvent ne pas être déjà à destination, ce qui signifie que l'insert échouera dès qu'un enregistrement en double est rencontré.
Comportement souhaité: INSERT ou IGNORE
Ceci est le scénario souhaité pour le problème donné. Insérez si vous le pouvez, sinon continuez.
Pseudo C#/java:
foreach(record in selectQuery)
{
try { destination.insert(record) }
catch(insertionException){//squelch}
}
Cela peut être manipulé dans SQL en ajoutant
AND NOT EXISTS (SELECT A FROM destination INNER JOIN source on destination.A = source.a1)
à la fin de la requête - En d'autres termes, vérifier avant d'insérer.
Quelles sont les autres alternatives à la gestion de cette situation courante? Quels sont les avantages et les inconvénients de ces techniques?
Vous pouvez toujours faire de A une clé primaire? –