Inserción de datos y manejo de claves duplicadas en MySQL

Clase 15 de 24Curso de Fundamentos de Bases de Datos

Resumen

En esta guía aprenderás cómo insertar y gestionar registros en tablas de bases de datos usando sentencias INSERT en MySQL, incluyendo técnicas efectivas para manejar claves duplicadas con sentencias como IGNORE y ON DUPLICATE KEY UPDATE. Dominar estas acciones ayuda a mantener la integridad y coherencia de los datos según la lógica de negocio.

¿Cómo insertar registros de forma sencilla en MySQL?

El comando básico para insertar información en cualquier tabla de una base de datos es INSERT. Debemos especificar claramente los nombres de tabla, columnas y valores correspondientes:

INSERT INTO products (name, slug)
VALUES ('pluma azul', 'pluma-azul');

Al hacerlo, MySQL asigna automáticamente valores incrementales a columnas específicas (por ejemplo, product_id). Podemos insertar múltiples registros agregando más tuplas separadas por comas:

INSERT INTO products (name, slug, description)
VALUES ('pluma negra', 'pluma-negra', 'escribir'),
('pluma rosa', 'pluma-rosa', 'dibujar');

¿Qué ocurre cuando insertamos valores que rompen reglas de claves únicas?

Cada vez que intentamos insertar un valor duplicado en columnas con claves únicas (únicos), MySQL lanza un error indicando la duplicación:

INSERT INTO products (name, slug)
VALUES ('pluma roja', 'pluma-azul');

Esto produce un mensaje de error como:

Duplicate entry 'pluma-azul' for key 'products.slug'

¿Cómo ignorar errores de duplicidad?

Añadir el término IGNORE al comando permite que MySQL inserte valores y simplemente ignore errores de duplicidad, emitiendo únicamente advertencias:

INSERT IGNORE INTO products (name, slug)
VALUES ('pluma roja', 'pluma-azul');

La inserción no se realiza, pero no genera error, solo una advertencia:

0 rows affected, 1 warning

¿Cómo gestionar registros duplicados con ON DUPLICATE KEY UPDATE?

Usar ON DUPLICATE KEY UPDATE ofrece una solución más útil y profesional para gestionar conflictos de claves duplicadas. Permite actualizar información de registros existentes en lugar de intentar insertar duplicados:

INSERT INTO products (name, slug)
VALUES ('pluma azul', 'pluma-azul')
ON DUPLICATE KEY UPDATE description = 'actualizado por duplicidad';

Este método ejecuta una actualización en lugar de reportar un error o advertencia, algo especialmente útil en escenarios prácticos.

¿Cómo modificaciones automáticas usando valores existentes?

Podemos realizar operaciones lógicas usando valores previos en la misma sentencia:

INSERT INTO products (name, slug)
VALUES ('pluma azul', 'pluma-azul')
ON DUPLICATE KEY UPDATE description = CONCAT('El precio es: ', price);

Este ejemplo toma el valor anterior del campo price y lo añade al texto en description.

¿Cómo generar datos aleatorios en MySQL?

Utilizando funciones como RAND(), podemos asignar datos aleatorios fácilmente:

UPDATE products SET price = RAND() * 100;

Esto genera automáticamente valores numéricos aleatorios que facilitan pruebas en la base de datos.

¿Qué otras operaciones y técnicas con inserciones MySQL consideras útiles? ¡Comparte tu experiencia y ejemplos en los comentarios!