web-dev-qa-db-fra.com

INSERT ... SUR LA CLE DUPLICATE (ne rien faire)

J'ai une table avec une clé unique pour deux colonnes:

CREATE  TABLE `xpo`.`user_permanent_gift` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
`fb_user_id` INT UNSIGNED NOT NULL ,
`gift_id` INT UNSIGNED NOT NULL ,
`purchase_timestamp` TIMESTAMP NULL DEFAULT now() ,
PRIMARY KEY (`id`) ,
UNIQUE INDEX `user_gift_UNIQUE` (`fb_user_id` ASC, `gift_id` ASC) );

Je veux insérer une ligne dans cette table, mais si la clé existe, ne rien faire! Je ne veux pas qu'une erreur soit générée parce que les clés existent.

Je sais qu'il existe la syntaxe suivante:

INSERT ... ON DUPLICATE KEY UPDATE ...

mais y a-t-il quelque chose comme:

INSERT ... ON DUPLICATE KEY DO NOTHING 

?

167
ufk

Oui, il y a INSERT IGNORE, ou vous pouvez faire ON DUPLICATE KEY UPDATE id=id.

285
ceejayoz

Utilisez ON DUPLICATE KEY UPDATE ...
Négatif: parce que la UPDATE utilise des ressources pour la deuxième action.

Utilisez INSERT IGNORE ...
Négatif: MySQL n’affiche aucune erreur en cas de problème, vous ne pouvez donc pas les gérer. Utilisez-le uniquement si la requête ne vous intéresse pas.

0