Tema SQL
INSERT IGNORE (MySQL / MariaDB)
Inserta filas ignorando errores de duplicado de clave única o algunos avisos convirtiéndolos en advertencia en lugar de abortar el lote.
Descripción
INSERT IGNORE INTO … VALUES … descarta filas que violarían UNIQUE/PK sin fallar toda la sentencia (según sql_mode). Es cómodo para cargas idempotentes pero puede ocultar bugs: no sabes qué fila se ignoró sin revisar warnings. ON DUPLICATE KEY UPDATE es más explícito cuando quieres actualizar. En modo estricto algunos casts inválidos también se truncan con IGNORE. PostgreSQL no tiene IGNORE; usa ON CONFLICT DO NOTHING.
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
INSERT IGNORE INTO tabla (columnas) VALUES (…);
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- Transparencia
- SHOW WARNINGS tras la sentencia para ver filas saltadas.
- Alternativa
- ON DUPLICATE KEY UPDATE o REPLACE (con efectos colaterales).
Ejemplos
Ejemplo 1
INSERT IGNORE INTO etiquetas (nombre) VALUES ('sql'), ('sql');
INSERT IGNORE INTO log_import (fila, hash) VALUES (1, 'abc'), (2, 'def');
Ejemplo 2
INSERT IGNORE INTO permisos (rol, clave) VALUES ('admin', 'reports'), ('admin', 'reports');
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.