guardar - insertar datos en mysql workbench
INSERTAR... EN LLAVE DUPLICADA(no hacer nada) (3)
Por lo que yo sé, no existe realmente.
La ACTUALIZACIÓN IGNORAR también ignora cualquier otro error que considero que es muy arriesgado.
Lo que hago (puede que no sea lo mejor que puedo hacer) es implementar la sintaxis UPDATE con una declaración UPDATE "inofensiva" como esta:
INSERT INTO mytable (id, ...) VALUES (4, ...) ON DUPLICATE KEY UPDATE id=4;
Obviamente, esto tiene E / S innecesarias de escritura, pero para mí esto ha funcionado bien hasta ahora.
Tengo una tabla con una clave única para dos columnas:
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) );
Quiero insertar una fila en esa tabla, pero si la clave existe, ¡no hacer nada! No quiero que se genere un error porque las claves existen.
Sé que existe la siguiente sintaxis:
INSERT ... ON DUPLICATE KEY UPDATE ...
pero hay algo así como:
INSERT ... ON DUPLICATE KEY DO NOTHING
?
Sí, está INSERT IGNORE
, o puede hacerlo ON DUPLICATE KEY UPDATE id=id
.
Usar ON DUPLICATE KEY
cuando no quieres hacer nada es muy ineficiente. Simplemente podría usar una declaración try ... catch
:
try {
// Perform query
}
catch (/Exception $e){
// Duplicate key - Do nothing
}