Duplicar e ignorar en las inserciones de MySQL
Las claves primarias de la tabla MySQL y los índices únicos impiden que se agreguen varias filas con el mismo índice a la tabla. Si intenta insertar una fila duplicada con una instrucción INSERT estándar, encontrará un error y la inserción fallará.
MySQL ofrece varias alternativas a la instrucción INSERT estándar y cada una maneja las filas duplicadas de manera ligeramente diferente: "INSERT IGNORE", "INSERT ... ON DUPLICATE KEY UPDATE" y "REPLACE".
Claves primarias e índices únicos
Los índices de clave primaria y las restricciones del índice "ÚNICO" requieren que cada fila contenga un valor único en la (s) columna (s) del índice, lo que permite que cada fila se identifique por su clave principal o el valor en la (s) columna (s) de la restricción del índice UNIQUE.
Si un INSERTO normal intenta insertar una fila que contiene un valor duplicado en la clave principal o el índice de restricción ÚNICO, la inserción fallará, posiblemente haciendo retroceder la transacción completa.
INSERTAR IGNORAR
INSERT IGNORE insertará filas de la misma manera que INSERT, pero con la excepción de que ignorará las filas con valores duplicados y continuará la ejecución sin crear un error. No se insertará ninguna fila que contenga un valor duplicado; por ejemplo:
INSERT IGNORE INTO my_table (unique_index_column, other_column) VALUES (1, 'otro valor');
INSERTAR ... SOBRE LA ACTUALIZACIÓN CLAVE DUPLICADA
INSERT ... ON DUPLICATE KEY UPDATE insertará cualquier fila no duplicada de manera normal. Sin embargo, cuando encuentra una fila duplicada, realizará una ACTUALIZACIÓN en la fila original; por ejemplo:
INSERTAR EN my_table (unique_index_column, other_column) VALUES (1, 'otro valor') EN LA ACTUALIZACIÓN DE LA CLAVE DUPLICADA other_column = 'valor de actualización duplicado';
REEMPLAZAR
REPLACE funciona igual que INSERT, excepto que cuando encuentra una fila duplicada, elimina la fila original y luego continúa con la inserción. Cualquier fila con un valor de índice único duplicado reemplazará la fila que originalmente contenía el valor; por ejemplo:
REEMPLAZAR EN mi_tabla (unique_index_column, other_column) VALUES (1, 'otro valor')