Duplicar e ignorar en inserciones de MySQL

Las claves primarias de la tabla MySQL y los índices únicos evitan que se agreguen a la tabla varias filas con el mismo índice. Si intenta insertar una fila duplicada con una instrucción INSERT estándar, encontrará un error y la inserción fallará.

MySQL proporciona varias alternativas a la instrucción INSERT estándar y cada una maneja 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 de índice "ÚNICO" requieren que cada fila contenga un valor único en la (s) columna (s) de índice, permitiendo que cada fila sea identificada por su clave primaria o el valor en la (s) columna (s) de restricción de índice ÚNICA.

Si un INSERT normal intenta insertar una fila que contiene un valor duplicado en la clave principal o en el índice de restricción UNIQUE, la inserción fallará, posiblemente revirtiendo toda la transacción.

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 ... EN LA ACTUALIZACIÓN DE CLAVE DUPLICADA

INSERT ... ON DUPLICATE KEY UPDATE insertará cualquier fila no duplicada como de costumbre. Sin embargo, cuando encuentra una fila duplicada, realizará una ACTUALIZACIÓN en la fila original; por ejemplo:

INSERT INTO my_table (unique_index_column, other_column) VALUES (1, 'otro valor') ON DUPLICATE KEY UPDATE other_column = 'valor de actualización duplicado';

SUSTITUIR

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:

SUSTITUIR EN my_table (columna_índice_única, otra_columna) VALORES (1, 'otro valor')