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
?
Oui, il y a INSERT IGNORE
, ou vous pouvez faire ON DUPLICATE KEY UPDATE id=id
.
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.