Alexander (HH): Prüfen ob Datensatz vorhanden, rowCount doch ok bei Select ??

Beitrag lesen

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".