Moin Moin!
ich möchte herausfinden ob in einer Tabelle schon ein Datensatz steht oder ob sie leer ist. Wenn leer dann Insert, wenn schon vorhanden dann Update.
Naiver Ansatz, wenn update und insert gleich wahrscheinlich sind:
1. Starte Transaktion
2. "select count(*) from tabelle where ..."
(So muß die DB nicht die gesamte Tabelle absammeln und als Result Set vorbereiten, nur um die Anzahl der Zeilen zu ermitteln.)
3. Wenn 0 insert, sonst update
4. Beende Transaktion
Falls update wahrscheinlicher ist:
1. Starte Transaktion
2. update
3. insert, falls update keine Zeile aktualisiert hat
4. Beende Transaktion
Falls insert wahrscheinlicher ist:
1. Starte Transaktion
2. insert
3. update, falls insert fehlschlug
4. Beende Transaktion
Die Transaktion sollte vor Race Conditions schützen, falls zwischen den beiden Schritten sich ein anderer Prozess an der gleichen Tabelle und am gleichen Datensatz zu schaffen macht.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".