sql >> Database >  >> RDS >> Mysql

Draagbare SQL upsert (insert+update) oplossing nodig

De enige volledig database-agnostische oplossing, waarbij gebruik wordt gemaakt van enigszins moderne databases, is om de Update en vervolgens de Insert in twee bewerkingen aan te roepen. Sommige databases staan ​​niet toe dat meerdere instructies in één bewerking worden verzonden en sommige databases retourneren mogelijk niet het aantal rijen dat door de update is beïnvloed, dus daar zou ik niet op vertrouwen.

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

(aparte oproep)

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'
                    );


  1. Hoe schrijf je een functie die tekst- of integerwaarden retourneert?

  2. Aparte verschillende versie van een website

  3. Krijg resultaten die binnen de markeringsradiussen vallen uit de database

  4. ORA-04021:time-out opgetreden tijdens het wachten om object te vergrendelen