¿Qué es Upsert y cómo hacerlo en mysql?

¿Qué es Upsert y cómo hacerlo en mysql?
Las bases de datos se han convertido en una parte esencial de la sociedad actual. Las bases de datos nos ayudan a almacenar nuestros datos de manera más eficiente y reducir los errores. Desde una tienda pequeña hasta una empresa multinacional, todos usan bases de datos para almacenar su información. Puede argumentar que la información se puede almacenar de manera organizada de manera organizada.

Si bien esto es técnicamente correcto pero prácticamente, esto es muy desastroso. La razón es que a medida que crecen los datos, se almacenan muchos despidos y datos inútiles. Muchas de las veces, los datos pueden incluso entrar en conflicto. Tal cosa puede ser muy perjudicial para cualquier negocio. La solución es almacenar los datos en una base de datos.

El sistema de administración de bases de datos o DBMS, en resumen, es un software que permite a los usuarios administrar su base de datos. Al tratar con grandes fragmentos de datos, se utiliza una base de datos. El sistema de gestión de bases de datos le proporciona muchas características críticas. Upsert es una de estas características. Upsert, como nombre, indica una combinación de dos palabras actualización e inserto. Las dos primeras letras son de la actualización, mientras que los cuatro del resto son de inserción. Upsert permite al autor del lenguaje de manipulación de datos (DML) insertar una nueva fila o actualizar una fila existente. Upsert es una operación atómica, lo que significa que es una operación de un solo paso.

MySQL, de forma predeterminada, proporciona la opción de actualización de clave duplicada para insertar, que realiza esta tarea. Sin embargo, se pueden usar otras declaraciones para completar esta tarea. Estos incluyen declaraciones como ignorar, reemplazar o insertar.

Puedes realizar Upsert usando MySQL de tres maneras.

  1. Upsert usando insertar ignore
  2. Upsert usando reemplazar
  3. Upsert usando la actualización de la tecla duplicada

Antes de avanzar más allá, usaré mi base de datos para este ejemplo, y trabajaremos en MySQL Workbench. Actualmente estoy usando la versión 8.0 edición comunitaria. El nombre de la base de datos utilizada para este tutorial es Sakila. Sakila es una base de datos que contiene dieciséis tablas. Nos centraremos en la tabla de la tienda en esta base de datos. Esta tabla contiene cuatro atributos y dos filas. El atributo store_id es la clave principal.

Veamos cómo las formas anteriores afectan estos datos.

Upsert usando insertar ignore

Insertar ignorar hace que mysql ignore sus errores de ejecución cuando realice un inserto. Entonces, si está insertando un nuevo registro con la misma clave primaria que uno de los registros que ya están en la tabla, recibirá un error. Sin embargo, si realiza esta acción usando Insert Ignore, el error resultante se suprimirá.

Aquí intentamos agregar el nuevo registro usando la declaración de inserción MySQL estándar.

Recibimos el siguiente error.

Pero cuando realizamos la misma función usando Insert Ignore, no recibimos ningún error. En cambio, recibimos la siguiente advertencia, y MySQL ignora esta declaración de inserción. Este método es beneficioso cuando agrega enormes cantidades de nuevos registros a su tabla. Entonces, si hay algunos duplicados, MySQL los ignorará y agregará los registros restantes a la mesa.

Upsert usando reemplazo:

En algunas circunstancias, es posible que desee actualizar sus registros existentes para mantenerlos actualizados. El uso de la inserción estándar aquí le dará una entrada duplicada para el error de clave principal. En esta situación, puede usar reemplazar para realizar su tarea. Cuando usa reemplazar cualquiera de los dos en los siguientes eventos.

Hay un antiguo disco que coincide con este nuevo disco. En este caso, reemplazar funciona como una instrucción de inserción estándar e inserta el nuevo registro en la tabla. El segundo caso es que algún registro anterior coincide con el nuevo registro que se agregará. Aquí reemplace las actualizaciones del registro existente.

La actualización se realiza en dos pasos. En el primer paso, se elimina el registro existente. Luego se agrega el registro recientemente actualizado como un inserto estándar. Entonces realiza dos funciones estándar, eliminar e insertar. En nuestro caso, reemplazamos la primera fila con datos recientemente actualizados.

En la imagen a continuación, puede ver cómo el mensaje dice "2 filas afectadas" mientras solo reemplazamos o actualizamos los valores de una sola fila. Durante esta acción, se eliminó el primer registro y luego se insertó el nuevo registro. Por lo tanto, el mensaje dice: "2 filas afectadas."

Upsert usando insertar ... en la actualización de la tecla duplicada:

Hasta ahora, hemos visto dos comandos Upsert. Es posible que haya notado que cada método tenía su déficit o limitaciones si puede. El comando ignorar aunque ignoró la entrada duplicada, pero no estaba actualizando ningún registro. El comando reemplazar, aunque se estaba actualizando, bien técnicamente no se estaba actualizando. Fue eliminando y luego insertando la fila actualizada.

Una opción más popular y efectiva que las dos primeras es el método de actualización de clave duplicada. A diferencia de Reemplazar, que es un método destructivo, este método no es destructivo, lo que significa que no suelta las filas duplicadas primero; en su lugar, los actualiza directamente. El primero puede causar muchos problemas o errores, siendo un método destructivo. Dependiendo de sus restricciones de clave externa, puede causar un error, o en el peor de los casos, si su clave externa está configurada en cascada, puede eliminar las filas de la otra tabla vinculada. Esto puede ser muy devastador. Entonces, usamos este método no destructivo, ya que es mucho más seguro.

Cambiaremos los registros actualizados utilizando reemplazar a sus valores originales. Esta vez usaremos el método de actualización de teclas Duplicado.

Observe cómo usamos variables. Estos pueden ser útiles porque no necesita agregar valores en la declaración, una y otra vez, reduciendo así las posibilidades de error. La siguiente es la tabla actualizada. Para diferenciarlo de la tabla original, cambiamos el atributo Last_Update.

Conclusión:

Aquí aprendimos que Upsert es una combinación de actualización de dos palabras e inserto. Funciona en el siguiente principio que, si la nueva fila no tiene ningún duplicado, inserte y si tiene duplicados, realice la función apropiada de acuerdo con la declaración. Hay tres métodos para realizar Upsert. Cada método tiene algunos límites. El más popular es el método de actualización de clave duplicada. Pero dependiendo de sus requisitos, cualquier persona de los métodos anteriores puede ser más útil para usted. Espero que este tutorial te sea útil.