TS: MYSQL Update wenn leer ansonsten insert

Beitrag lesen

Hello,

Also quasi, wenn eine leere Zelle existiert dann UPDATE ansonsten INSERT INTO.

Normalerweise macht man das ja genau umgekehrt, also insert ... on duplicate key update ...

Da hat der Tom schon recht mit seiner Feststellung bezüglich Datenmodell. Ich würde mir das nochmal überlegen, insbesondere hinsichtlich Datenkonsistenz. MfG

Du hast da aber die Regel noch nicht richtig verstanden.

Tabelle A mit Kopfdaten Tabelle B mit Positionsdaten.

Eingetragen werden soll ein neuer Datensatz in B mit (A-id = A.id, Name), aber nur dann, wenn nicht schon N Zeilen mit A-id in B vorhanden sind.
Sind schon N Zeilen vorhanden, muss erst in A eine neue Zeile erzeugt werden und dann erst in B die Zeile mit (A-id = A.(LAST_INSERT_ID), Name) eingetragen werden.

Das ganze Problem reduduziert sich also auf ein oder zwei inserts mit einem Count auf B zwischendurch, alles verpaclt in einem Trigger.

Wenn man in B (A-id, Name, posnr = count(B, ...)+1) einträgt, kann man allerdings mittels uniq-Key auf (A-id, posnr) auch die racecondition abfangen. Der Trigger muss im Konfliktfall dann ggf. eine Exception werfen. Ob man die rows-inserted innerhalb des Triggers ermitteln kann, weiß ich noch nicht.

Ich wede das morgen früh am Desktop mal ausprobieren.

Liebe Grüße
Tom S.

--
Es gibt nichts Gutes, außer man tut es
Andersdenkende waren noch nie beliebt, aber meistens diejenigen, die die Freiheit vorangebracht haben.