ACTUALIZACIÓN DE SQL vs. INSERT vs. UPSERT

Este artículo analiza tres declaraciones SQL: ACTUALIZACIÓN, INTRODUCCIÓN y UPSERT. Incluye ejemplos de cómo y cuándo usarlos.

SQL UPDATE vs. INSERT vs. UPSERT

image_pdfimage_print

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

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

La declaración UPDATE actualiza un registro actual con la nueva información que 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 la optimización de las consultas reduce la latencia de la base de datos. Una consulta UPDATE optimizada puede reducir el procesamiento de datos a solo milisegundos. La infraestructura también es importante para la baja latencia en los servidores de bases de datos de gran volumen. Utilice las siguientes consultas para empezar. Las columnas de indexación que se actualizan comúnmente pueden ayudar a mejorar el rendimiento. En grandes cargas de trabajo simultáneas, puede ser necesario que los desarrolladores de bases de datos utilicen niveles de aislamiento para proteger las declaraciones de afectar a otras declaraciones que también se procesan.

Por otro lado, los desarrolladores y los administradores de bases de datos deberían tener un manejo de errores en su código. Estos ejemplos muestran cómo realizar cada comando, pero la lógica de su empresa debe determinar qué hacer si se desencadena un error. Por ejemplo, si la base de datos no inserta un nuevo registro de cliente, notifique al usuario que intente de nuevo o contacte con el servicio de atención al cliente. La latencia de la base de datos, los errores y las advertencias de optimización pueden lograrse con herramientas de supervisión del rendimiento.

ACTUALIZACIÓN en SQL: Ejemplos

Para la mayoría de las declaraciones de ACTUALIZACIÓN SQL, utiliza la cláusula WHERE. La cláusula WHERE determina qué registros se actualizarán y deja los otros intactos. Si no utiliza una cláusula WHERE al ejecutar una declaración UPDATE, 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 WHERE en su declaración SQL para evitar este error.

La sintaxis de la declaración UPDATE depende del motor de base de datos que utilice. Las bases de datos MySQL y Oracle SQL utilizan una sintaxis similar para sus declaraciones UPDATE. Los siguientes ejemplos cambian el nombre de un cliente a «john», donde la ID del cliente es 44.

Cómo usar INSERT en SQL: ejemplos

Cuando desea añadir 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 dar a cada registro un identificador único. El identificador único se rellena 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 añade un nuevo cliente a la tabla Cliente con un nombre y un apellido rellenados en las columnas adecuadas. Observe que las columnas están definidas junto con los valores que hay que añadir a cada columna, respectivamente.

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 nueva información. El motor de base de datos Oracle tiene un comando UPSERT específico. Con MySQL, el comando utiliza el término SUSTITUIR en su lugar.

Los desarrolladores de aplicaciones utilizan el comando UPSERT para evitar los registros duplicados, sobre todo 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 se produce cuando se importan datos de una tabla a otra y es posible que existan registros duplicados. Por ejemplo, obtiene una lista de los registros de los clientes de una empresa adquirida y sabe que algunos clientes ya están en la base de datos empresarial actual. La declaración de UPSERT solo actualizará los clientes existentes y añadirá otros nuevos en los que no existan.

En el ejemplo anterior, si el cliente con un identificador de 44 ya existe, el registro original se borra y luego se añade un nuevo registro de cliente con un identificador de 44. Es importante recordar que el comando SUSTITUIR no actualiza técnicamente ningún dato. En lugar de ello, borra y vuelve a añadir una fila a la tabla.

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

PostGreSQL no tiene una declaración UPSERT específica, pero admite un tipo de INTRODUCIR en el que el servidor solo insertará un nuevo registro si aún no existe. Si el registro existe, las limitaciones de la tabla deben generar un error y realizar una ACTUALIZACIÓN en lugar de una declaración de INTRODUCIR. La sintaxis PostGreSQL se muestra a continuación:

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 de origen y lo fusiona 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. 

MongoDB tiene un parámetro de comando UPDATE 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 funcionará y se actualizará en un registro.

ACTUALIZACIÓN vs. INTRODUCIR: Diferencias en SQL

La mayoría de las aplicaciones utilizan varias declaraciones UPDATE e INSERT para gestionar los datos. INSERTAR los enunciados son necesarios cuando tiene que añadir un registro. Cuando necesite cambiar los datos ya almacenados, es necesario presentar la declaración UPDATE.

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

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

UPSERT vs. ACTUALIZACIÓN e INTRODUCIR: ¿qué es mejor?

La afirmación que use depende de lo que quiera hacer con los datos de su base de datos. Para el rendimiento, INSERT es mejor que UPSERT, pero no siempre puede evitar usar una declaración de ACTUALIZACIÓN y necesita una manera de verificar que el registro no existe ya. La declaración 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 quiere duplicados, la declaración UPSERT es mejor para el rendimiento. Completa tanto la ACTUALIZACIÓN como la INTRODUCCIÓN en una sola acción.

Cuándo usar la ACTUALIZACIÓN en SQL

La única manera de cambiar los datos de una tabla de base de datos es con la declaración UPDATE. Las aplicaciones cambian constantemente los datos por varias razones y utilizan declaraciones de ACTUALIZACIÓN SQL en el backend. Cuando cambia su información de contacto, los datos de su 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 back-end ejecute una declaración de ACTUALIZACIÓN.

Utilice 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 cuantas más columnas y filas tengan que editarse, más ralentizarán los servicios de la base de datos. Puede ser beneficioso realizar una declaración de ACTUALIZACIÓN de lotes grandes en horas de menor actividad.

Cuándo usar INSERT en SQL

Necesita la frase INSERT cuando quiere añadir un registro a una tabla. Cuando se registra en una aplicación o pide un nuevo producto a una tienda de comercio electrónico, la base de datos back-end utiliza la instrucción INSERT SQL para añadir un nuevo registro a la base de datos. El nuevo registro puede modificarse más tarde con la declaración UPDATE, pero primero se crea con la declaración INSERT.

INTRODUZCA los enunciados generalmente son rápidos. Cuando tiene que añadir un registro, es inevitable. Al igual que las declaraciones UPDATE, los insertos grandes (por ejemplo, la importación de datos desde un archivo estático) pueden optimizarse mejor si se ejecutan durante las horas de menor actividad. Los archivos de registro para la auditoría y el registro utilizan declaraciones INSERT simples.

Cuándo usar UPSERT en SQL

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

Las declaraciones de UPSERT suelen ser beneficiosas si tiene un gran conjunto de datos de origen que podría tener duplicados. Por ejemplo, no querrá duplicar una tabla de productos, así que usaría UPSERT en lugar de usar una frase de INTRODUCIR y eliminar los duplicados más tarde. UPSERT es excelente cuando tiene grandes lotes de datos, pero puede causar problemas de latencia si se usan para todas las declaraciones INSERT innecesariamente. Utilice UPSERT solo cuando pueda importar duplicados a una tabla principal.

Preguntas frecuentes

UPSERT suele ser más seguro que la lógica de “seleccionar e insertar” enrollada a mano en condiciones de alta concurrencia, porque la detección y la resolución de conflictos se gestionan dentro de una única operación atómica. Todavía tiene que asegurarse de que los índices correctos y las limitaciones únicas están en su lugar, para que la base de datos pueda resolver los conflictos rápidamente y evitar un bloqueo o una contención innecesarios.

La manera más fiable de evitar los duplicados es definir una clave primaria o una restricción única en la columna o el conjunto de columnas que deben ser únicas y luego escribir su INSERT o UPSERT alrededor de esa restricción. El motor de la base de datos exigirá la exclusividad en el momento de la escritura, lo que es más fiable que intentar comprobar manualmente las filas existentes en el código de la aplicación.

UPSERT es más útil cuando necesita crear o actualizar regularmente el mismo registro basándose en una clave, como un ID de usuario o un ID de pedido. Simplifica la lógica de la aplicación, reduce las posibilidades de que se produzcan las condiciones de carrera causadas por los patrones de «comprobar e insertar» y, a menudo, da como resultado menos viajes de ida y vuelta a la base de datos que la emisión de declaraciones INSERTAR y ACTUALIZAR separadas.

INSERT añade una nueva fila, UPDATE cambia una fila existente que ya cumple sus criterios y UPSERT combina ambos comportamientos insertando una nueva fila cuando no existe o actualizando una fila existente cuando se encuentra una coincidencia. Pensar en términos de «crear», «modificar» y «crear o modificar» puede ayudarle a elegir la afirmación adecuada para cada caso de uso.