Saltar al contenido

En clave duplicada no hacer nada

Solución:

Tres maneras. Cualquiera IGNORE errores duplicados (pero no use eso, vea la nota al final):

INSERT IGNORE 
  ... ;                   -- without ON DUPLICATE KEY

o intente hacer una actualización redundante cuando haya un duplicado:

INSERT 
  ... 
ON DUPLICATE KEY UPDATE
  id = id ;

o compruebe si hay duplicados antes de insertar:

INSERT INTO requests
  (id, ctg, msg, nick, filled, dated, filldate)
SELECT
  NULL, 'urgent', 'Help!', 'Hermione', 'Y', NOW(), NOW()
FROM
  dual
WHERE NOT EXISTS
      ( SELECT *  FROM requests  WHERE (nick, msg) = ('Hermione', 'Help!') )
  AND NOT EXISTS
      ( SELECT *  FROM requests  WHERE (ctg, msg) = ('urgent', 'Help!') ) ;

Una diferencia entre la tercera vía y las dos primeras es que cuando hay duplicados, el id no se incrementará. Con INSERT IGNORE y INSERT ... ON DUPLICATE KEY, se incrementará automáticamente y dado que la inserción no se realizará, tendrá espacios en los valores de id.

También debo agregar que sus scripts siempre deben buscar errores de todos modos y no fallar cuando hay uno. Cualquier consulta o declaración puede fallar y devolver un error ocasionalmente, por varias razones. Los trucos anteriores solo te salvarán de un tipo de error.

*Nota: INSERT IGNORE ignorará todos insertar relacionado errores, incluso no nulas violaciones de restricciones, por lo que es mejor evitarlo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *