MySQL Trigger soll 'falsche' Inserts verhindern

Hallo,

ich habe eine Tabelle der Form: (Ort1,Ort2,entfernung)
Regel: Ort1 und Ort2 müssen unterschiedlich sein.

Ich brauche jetzt einen Trigger der „falsche“ Inserts wieder löscht.
Meine Lösung funktioniert leider nicht. Ich bekomme folgende Fehlermeldung:

Can’t update table ‚entfernung‘ in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Mein Trigger:

CREATE TRIGGER checkort AFTER INSERT ON entfernung
FOR EACH
ROW BEGIN
DELETE FROM entfernung WHERE Ort1 = Ort2;

END ;

Wer kann mir helfen?

hallo

so einfach geht das nicht. ein trigger darf nicht schreibend auf jene tabelle zugreifen, auf der der trigger liegt. dein ansatz ist sowieso meiner meinung nach falsch: die datenbank sollte verhindern, dass ungültige datensätze erfasst werden können und nicht klammheimlich diese entfernen. das db-frontend ist dafür zuständig, sinnlose inserts zu filtern.

ich würde also eher entweder einen check-constraints anlegen (keine ahnung, ob mysql sowas bietet). versucht das frontend ein insert mit zwei gleichen werten, kommt eine datenbankfehlermeldung. das frontend kann dann immer noch diesen fehler ignorieren.

es geht auch mit einem trigger - dieser muss einfach eine fehlermeldung produzieren, wenn ungültige werte daherkommen oder gar nicht tun, wenn alles ok ist.

lg
erwin

Hi!

so einfach geht das nicht. ein trigger darf nicht schreibend
auf jene tabelle zugreifen, auf der der trigger liegt.

Nanana, also mit einer autonomen Transaktion funktioniert sogar das (um den „Table-is-Mutating“-Error zu _umgehen_)

dein
ansatz ist sowieso meiner meinung nach falsch

Hiermit liegst Du aber komplett richtig und mit dem Rest sowieso

Grüße,
Tomh