|

INSERT IGNORE en MySQL

Muchas veces realizamos inserts y nuestras comprobaciones son erróneas e intentamos insertar registros duplicados, dándonos un error gordo en MySQL. Para evitar esto, normalmente se usa un REPLACE cuando la situación permite reemplazar los valores nuevos por los actuales, pero cuando esto no es posible, nos tenemos que pegar con el código buscando la comprobación que no hacemos correctamente. Para evitar esto: insertar algo ya existente, MySQL ofrece la posibilidad de ignorar el insert cuando no se puede insertar:

INSERT IGNORE 
  INTO tabla 
    (id, valor, ...) 
  VALUES 
    (25, 'valor, ...)

Cada día aprendo algo nuevo, aunque a veces deberían darme con la Biblia de MySQL (775 páginas) en la cabeza por no conocer antes esto.

Similar Posts

3 Comments

  1. Buenas,

    La verdad que es una utilidad muy buena, en su momento la utilicé mucho, pero si me permites recomendarte, sería mejor que te acostumbraras con otra sentencia, debido a que INSERT IGNORE es sólo permitido para MySQL y el día que utilices Oracle o SQLServer tendrás que buscarte la vida con otra sentencia. Sólo es para que lo tengas en cuenta (a mi me paso)

  2. No comparto ocultar los errores de esta forma. Creo que es mejor que falle y solucionarlo, ya que el error podría tener otras consecuencias.

    Por otro lado, si de forma controlada se quiere hacer un insert/update sin tener claro si antes ya existía el registro (incluso teniendo diferentes valores en caso de ser update) me gusta la opción “ON DUPLICATE KEY UPDATE”.

    Saludos!

  3. Tecnico, estoy totalmente de acuerdo contigo en intentar usar SQL estándar, yo también he sufrido lo de migrar de una BD a MySQL y es un infierno.

    Armando, realmente, me va a venir de perlas para hacer una migración de una tabla a otra, que a veces me sale error de ids duplicados porque para ahorrar tiempo mando procesos concurrentes, pero claro, pierdo más tiempo en depurar el proceso que en meterle esta pequeña chapu, total, es una tarea puntual para una migración que quiero hacer.

    Saludos a ambos

Comments are closed.