Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Solução de upsert de SQL portátil (inserir + atualizar) necessária


A única solução completamente independente de banco de dados, usando bancos de dados um tanto modernos, é chamar o Update e depois o Insert em duas operações. Alguns bancos de dados não permitem várias instruções enviadas em uma única operação e alguns bancos de dados podem não retornar o número de linhas afetadas pela atualização, portanto, eu não confiaria nisso.
Update MyTable
Set Data = 'Data'
Where KeyCol = 'key';

(chamada separada)
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'
                    );