ACTUALIZACIÓN DE SQL frente a INSERTAR frente a UPSERT



En cualquier aplicación, debe agregar registros a las tablas de bases de datos y cambiar la información que almacenan. La instrucción ACTUALIZAR SQL cambia los datos ya almacenados en la base de datos y la instrucción INSERTAR agrega un nuevo registro a una tabla. La declaración de UPSERT es una combinación de INSERTAR y ACTUALIZAR y realiza una actualización o agrega un registro si aún no existe. Aquí, analizaremos la ACTUALIZACIÓN DE SQL frente a INSERTAR frente a UPSERT.

Cómo usar la ACTUALIZACIÓN en SQL: Ejemplos

La declaración ACTUALIZAR actualiza un registro actual con la información nueva que usted especifique. Por ejemplo, un cliente puede mover y cambiar su información de contacto en una tabla de comercio electrónico, y una declaración de ACTUALIZACIÓN realizará el cambio. Cualquier cambio que realice en una base de datos utilizará la declaración de ACTUALIZACIÓN.

Es importante tener en cuenta que optimizar las consultas reduce la latencia de la base de datos. Una consulta de ACTUALIZACIÓN optimizada puede reducir el procesamiento de datos a solo milisegundos. La infraestructura también es importante para una latencia baja en servidores de bases de datos de alto volumen. Use las siguientes consultas para comenzar. Las columnas de indexación comúnmente actualizadas podrían ayudar a mejorar el rendimiento. En grandes cargas de trabajo simultáneas, es posible que sea necesario que los desarrolladores de bases de datos usen el nivel de aislamiento para evitar que las declaraciones afecten el procesamiento de otras declaraciones.

Además, los desarrolladores y administradores de bases de datos deben tener un manejo de errores en su código. Estos ejemplos muestran cómo realizar cada comando, pero su lógica comercial debe determinar qué hacer si se desencadena un error. Por ejemplo, si la base de datos no puede insertar un nuevo registro de cliente, notifique al usuario para que lo intente de nuevo o comuníquese con el servicio de atención al cliente. La latencia de la base de datos, los errores y las advertencias de optimización se pueden lograr con las herramientas de monitoreo del rendimiento.

ACTUALIZACIÓN en SQL: Ejemplos

Para la mayoría de las declaraciones de ACTUALIZACIÓN DE SQL, utiliza la cláusula DÓNDE. La cláusula DÓNDE determina qué registros se actualizarán y deja intactos a los demás. Si no utiliza una cláusula DÓNDE al ejecutar una declaración de ACTUALIZACIÓN, la base de datos realizará cambios en todos los registros de la base de datos, lo que probablemente sea un error. Asegúrese de tener una cláusula DÓNDE en su instrucción SQL para evitar este error.

La sintaxis de estado de cuenta ACTUALIZAR depende del motor de base de datos que utilice. Las bases de datos MySQL y Oracle SQL utilizan sintaxis similar para sus declaraciones de ACTUALIZACIÓN. Los siguientes ejemplos cambian el nombre de un cliente a “john”, donde la identificación del cliente es 44.

[crayon-6a7a4370e8456582793542/]
[crayon-6a7a4370e8461419389502/]

Cómo usar INSERT en SQL: Ejemplos

Cuando desea agregar un nuevo registro a una tabla, utiliza la instrucción INSERT SQL. La mayoría de los diseñadores de bases de datos crean una columna predeterminada para darle a cada registro un identificador único. El identificador único se completa automáticamente, por lo que no lo inserta manualmente y permite que el motor de la base de datos lo haga por usted. No puede insertar valores duplicados en filas de identificador, por lo que es más eficiente permitir que la base de datos lo haga por usted.

En los siguientes ejemplos, se agrega un nuevo cliente a la tabla de clientes con un nombre y apellido en las columnas correspondientes. Tenga en cuenta que las columnas se definen junto con los valores que se deben agregar a cada columna, respectivamente.

[crayon-6a7a4370e8464365915454/]

Cómo usar UPSERT en SQL: Ejemplos

El comando UPSERT es una declaración útil cuando desea insertar una fila solo si aún no existe. Si ya existe, la base de datos actualizará el registro con información nueva. El motor de base de datos de Oracle tiene un comando UPSERT específico. Con MySQL, el comando usa el término REEMPLAZAR.

Los desarrolladores de aplicaciones utilizan el comando UPSERT para evitar registros duplicados, especialmente cuando tienen identificadores únicos vinculados a ellos, y las declaraciones de la aplicación no deben insertar un registro debido a un registro existente anteriormente. A menudo sucede cuando importa datos de una tabla a otra, y es posible que existan registros duplicados. Por ejemplo, obtiene una lista de registros de clientes de una empresa adquirida y sabe que algunos clientes ya están en la base de datos comercial actual. El estado de cuenta de UPSERT solo actualizará a los clientes existentes y agregará nuevos cuando no existan.

[crayon-6a7a4370e8466686431130/]

En el ejemplo anterior, si el cliente con un identificador de 44 ya existe, el registro original se elimina y luego se agrega un nuevo registro de cliente con un identificador de 44. Es importante recordar que el comando REEMPLAZAR no actualiza técnicamente ningún dato. En su lugar, elimina y vuelve a agregar una fila a la tabla.

[crayon-6a7a4370e8468895396149/]

Con Oracle, el comando UPSERT actualizará al cliente con un identificador de 44 en lugar de eliminarlo y volver a agregarlo. Si el registro no existe, el motor de Oracle agregará el registro del cliente a la tabla.

PostgreSQL no tiene una declaración UPSERT específica, pero admite un tipo de INSERTAR donde el servidor solo insertará un nuevo registro si aún no existe. Si el registro existe, las restricciones de tabla deben arrojar un error y realizar una ACTUALIZACIÓN en lugar de una declaración INSERTAR. La sintaxis de PostgreSQL es la siguiente:

[crayon-6a7a4370e846b714524044/]

Microsoft SQL Server tampoco admite una declaración UPSERT, pero los desarrolladores pueden usar el comando MERGE para realizar una acción similar. La declaración MERGE toma un conjunto de datos fuente y lo combina con una tabla, pero solo inserta un nuevo registro si no existe una fila. Si existe una fila, la declaración MERGE actualizará el registro. 

[crayon-6a7a4370e846d887278864/]

MongoDB tiene un parámetro de comando ACTUALIZAR para indicar a la base de datos que realice una declaración UPSERT. Al igual que las otras bases de datos, MongoDB insertará un nuevo registro solo si el registro no existe. Si existe, la base de datos realizará y actualizará un registro.

[crayon-6a7a4370e846f794977044/]

ACTUALIZACIÓN vs. INSERTO: Diferencias en SQL

La mayoría de las aplicaciones utilizan varias declaraciones de ACTUALIZACIÓN e INSERTE para administrar datos. INSERTAR estados de cuenta son necesarios cuando necesita agregar un registro. Cuando necesite cambiar los datos ya almacenados, es necesario el estado de cuenta de ACTUALIZACIÓN.

La declaración INSERTAR requiere todas las columnas que deben llenarse con los valores necesarios. La declaración de ACTUALIZACIÓN no requiere la cláusula DÓNDE, pero si la excluye, todos los registros se actualizan con los datos dados. Es poco probable que desee actualizar todos los registros, así que asegúrese de incluir la cláusula DÓNDE.

No puede usar ACTUALIZACIÓN en lugar de INSERTAR, pero la declaración de UPSERT es una buena alternativa. Con la declaración de UPSERT, la base de datos actualiza los registros donde están disponibles y los inserta en la tabla si el registro no existe. INSERTAR es más rápido que una declaración de ACTUALIZACIÓN siempre que una base de datos esté correctamente optimizada.

UPSERT vs. ACTUALIZACIÓN e INSERTE: ¿Cuál es mejor?

La declaración que utilice depende de lo que desee hacer con los datos de su base de datos. Para el rendimiento, INSERTAR es mejor que UPSERT, pero no siempre puede evitar usar una declaración de ACTUALIZACIÓN y necesita una forma de verificar que el registro aún no existe. La declaración de UPSERT simplifica todo el proceso en lugar de escribir una declaración IF más larga en un procedimiento almacenado. Cuando tiene grandes actualizaciones o inserta declaraciones para importar datos y no desea duplicados, la declaración de UPSERT es mejor para el rendimiento. Usted completa tanto la ACTUALIZACIÓN como la INSERTACIÓN en una sola acción.

Cuándo usar la ACTUALIZACIÓN en SQL

La única forma de cambiar datos en una tabla de base de datos es con la declaración ACTUALIZAR. Las aplicaciones cambian constantemente los datos por varias razones y utilizan declaraciones de ACTUALIZACIÓN DE SQL en el backend. Cuando cambia su información de contacto, datos de tarjeta de crédito o una dirección de envío para una cuenta en línea, es probable que el sistema de aplicación backend ejecute una declaración de ACTUALIZACIÓN.

Use ACTUALIZAR cuando solo necesite editar datos y los duplicados no sean una preocupación. Una simple declaración de ACTUALIZACIÓN no es lenta, pero cuantos más columnas y filas deban editarse, más lentos serán los servicios de base de datos. Podría ser beneficioso realizar una declaración de ACTUALIZACIÓN por lotes grandes en horas no pico.

Cuándo usar INSERT en SQL

Necesita la declaración INSERTAR cuando desea agregar un registro a una tabla. Cada vez que se registra en una aplicación o solicita un nuevo producto en una tienda de comercio electrónico, la base de datos backend utiliza la instrucción INSERT SQL para agregar un nuevo registro a la base de datos. El nuevo registro se puede cambiar más adelante con la declaración de ACTUALIZACIÓN, pero primero se crea con la declaración INSERTAR.

INSERTAR estados de cuenta generalmente son rápidos. Cuando necesita agregar un registro, es inevitable. Al igual que las declaraciones de ACTUALIZACIÓN, los insertos grandes (p. ej., como importar datos de un archivo estático) podrían optimizarse mejor si se ejecutan durante las horas pico. Los archivos de registro para la auditoría y el registro utilizan declaraciones INSERTAR simples.

Cuándo usar UPSERT en SQL

La declaración de UPSERT tiene el menor rendimiento de los tres comandos, pero tiene un propósito cuando tiene varios registros para agregar a una tabla y no desea duplicarlos. Cuando importa datos a una tabla y cree que podría haber registros duplicados, use la declaración UPSERT para actualizar los registros actuales en lugar de agregar registros duplicados. Por ejemplo, si necesita importar clientes de un archivo externo a sus tablas de base de datos, una declaración de UPSERT podría ser más adecuada que usar una declaración de INSERTAR.

Las declaraciones de UPSERT generalmente son beneficiosas si tiene un conjunto de datos de fuente grande que podría tener duplicados. Por ejemplo, no debería duplicar una tabla de productos, por lo que debería usar UPSERT en lugar de usar una declaración INSERTAR y eliminar los duplicados más adelante. UPSERT es excelente cuando tiene grandes lotes de datos, pero podría causar problemas de latencia si se utilizan para todos los estados de cuenta de INSERTAR innecesariamente. Solo use UPSERT cuando pueda importar duplicados a una tabla principal.

Preguntas frecuentes

UPSERT es generalmente más seguro que la lógica de “seleccionar y luego insertar” enrollada a mano bajo alta simultaneidad porque la detección y resolución de conflictos se manejan dentro de una única operación atómica. Aún debe asegurarse de que se implementen los índices correctos y las limitaciones únicas para que la base de datos pueda resolver conflictos rápidamente y evitar el bloqueo o la contención innecesarios.

La forma más confiable de evitar duplicados es definir una clave primaria o una restricción única en la columna o el conjunto de columnas que deben ser únicas, luego escriba su INSERTO o UPSERT en torno a esa restricción. El motor de la base de datos exigirá la singularidad en el tiempo de escritura, lo cual es más confiable que intentar verificar manualmente las filas existentes en el código de aplicación.

UPSERT es más útil cuando necesita crear o actualizar regularmente el mismo registro basado en una clave, como una ID de usuario o una ID de pedido. Simplifica la lógica de la aplicación, reduce la probabilidad de que las condiciones de carrera sean causadas por patrones de “verificar y luego insertar” y, a menudo, resulta en menos viajes de ida y vuelta a la base de datos que la emisión de declaraciones INSERTAR y ACTUALIZAR separadas.

INSERT agrega una fila completamente nueva, UPDATE cambia una fila existente que ya coincide con sus criterios y UPSERT combina ambos comportamientos al insertar una nueva fila cuando no existe o actualizar una fila existente cuando se encuentra una coincidencia. Pensar en términos de “crear”, “modificar” y “crear o modificar” puede ayudarlo a elegir la afirmación correcta para cada caso de uso.