sql >> Base de Datos >  >> RDS >> Mysql

Se necesita una solución de upsert SQL portátil (insertar + actualizar)

La única solución completamente independiente de la base de datos, utilizando bases de datos algo modernas, es llamar a Actualizar y luego a Insertar en dos operaciones. Algunas bases de datos no permiten el envío de varias declaraciones en una sola operación y es posible que algunas bases de datos no devuelvan el número de filas afectadas por la actualización, por lo que no confiaría en eso.

Update MyTable
Set Data = 'Data'
Where KeyCol = 'key';

(llamada aparte)

Insert Into MyTable(KeyCol, Data)
Select 'key', 'Data'
From ( Select 1 As Value ) As Z
Where Not Exists    (
                    Select 1
                    From MyTable As T1
                    Where T1.KeyCol = 'key'
                    );