#414 · Herramienta para desarrolladores

SQL Upsert Generator

Prepara sentencias de inserción con actualización en caso de conflicto. A partir de un objeto JSON, crea las columnas y valores del INSERT y usa las columnas de conflicto indicadas para producir ON CONFLICT ... DO UPDATE en PostgreSQL o SQLite, o ON DUPLICATE KEY UPDATE en MySQL. Las columnas usadas como clave no se incluyen en la parte de actualización. El resultado es una plantilla de SQL; debes confirmar que existe una restricción UNIQUE o clave compatible en el esquema real.

Datos de entrada

Datos JSON
Espacio publicitario

Cómo usar esta herramienta para desarrolladores

  1. Pega una fila JSON.
  2. Indica la tabla y las columnas que identifican el conflicto.
  3. Selecciona PostgreSQL, SQLite o MySQL.
  4. Genera el UPSERT y compáralo con las claves UNIQUE del esquema.

Qué hace esta herramienta para desarrolladores

Produce una inserción y una rama de actualización específica del dialecto cuando ya existe una fila equivalente.

Excluye las columnas de conflicto del conjunto que se actualiza y adapta la sintaxis de la rama UPSERT.

La sintaxis generada presupone que el motor puede resolver el conflicto usando una restricción existente.

Ejemplo

PostgreSQL: INSERT INTO "users" ("id", "name") VALUES (42, 'Ana') ON CONFLICT ("id") DO UPDATE SET "name" = excluded."name";

Casos de uso

  • Sincronizar registros por clave natural.
  • Preparar seeds repetibles.
  • Crear ejemplos de upsert para capas de datos.

Consejos para obtener resultados fiables

  • Comprueba índices UNIQUE antes de ejecutar.
  • Evita actualizar columnas inmutables.
  • Valida valores de fecha y JSON según el motor.
  • Usa parámetros al integrar el SQL en código.

Detalles del procesamiento

El generador diferencia la sintaxis ON CONFLICT de PostgreSQL/SQLite y ON DUPLICATE KEY UPDATE de MySQL.

No genera MERGE para SQL Server ni Oracle y no inspecciona constraints reales.

Preguntas frecuentes

¿Qué diferencia hay entre ON CONFLICT y ON DUPLICATE KEY UPDATE?

PostgreSQL y SQLite usan ON CONFLICT; MySQL usa ON DUPLICATE KEY UPDATE y resuelve el conflicto según claves únicas del esquema.

¿Puedo usar varias columnas de conflicto?

Sí para la salida ON CONFLICT. Sepáralas con comas y verifica que exista una restricción compatible.

¿Qué pasa si todas las columnas son claves de conflicto?

En PostgreSQL o SQLite se genera DO NOTHING; en MySQL se crea una actualización neutra de la primera clave.

¿El generador detecta la clave primaria de mi tabla?

No. Debes indicar las columnas y confirmar su restricción en el esquema real.

¿Es seguro insertar datos de usuario con este SQL?

Para datos no confiables, usa parámetros del driver en vez de ejecutar SQL construido como texto.

Módulos de la herramienta

MóduloFunción
Generador INSERTConstruye columnas y valores desde JSON.
Resolución de conflictoEmite la rama UPSERT según dialecto.
Filtro de actualizaciónExcluye claves de conflicto de los cambios.

Explorar la categoría

Continúa con otras utilidades de SQL, análisis de consultas y conexiones de base de datos.