Sven: Frage zu Triggern in SQL

Beitrag lesen

Hallo Forum,

bisher habe ich alle Änderungen im Datenbanksystem über die Applikationsebene gemacht. Nun habe ich einen Fall, bei dem ich gerne einen Trigger einsetzen würde. Dazu habe ich Fragen.

DELIMITER $$

CREATE TRIGGER `kalkulation` AFTER UPDATE ON kalkulationstabelle FOR EACH ROW BEGIN
    UPDATE  ersatzteile
    SET Rabatt = NEW.Rabatt
    WHERE TID = NEW.KID;

END $$

DELIMITER ;

Das soll mein Beispieltrigger werden, der in diesem Fall einen veränderten Rabatt der Kalkulation in der Ersatzteile-Tabelle übernimmt.

Meine Fragen:

  1. Was bedeutet FOR EACH ROW?
    Muss nun SQL (in meinem Fall mysql) die komplette Kalkulationstabelle nach geänderten Rabatten durchsuchen? Dann könnte so ein Trigger ja mitunter sehr leistungshungrig sein, oder?

  2. Wie sinnvoll ist der Einsatz eines Triggers auf Applikationsebene?
    Was ich meine: Ein Trigger ist nicht dramatisch, aber wenn ich sehr viele Trigger nutzen würde, könnte das ganz schön aufwendig sein, wenn mal Fehler auftreten.

  3. Wie sicher sind Trigger? Funktionieren die immer oder gibt es Fehlerquellen, die ich als Trigger-Anfänger nicht kenne?

  4. Kann man auch Trigger-Schlangen bilden?
    Tabelle1 wird upgedated, daraufhin wird Tabelle2 upgedated, daraufhin Tabelle3? (mal vom Sinngehalt ganz abgesehen)

  5. Wenn ich einen Trigger zusätzlich zur selben Programmierung auf Applikationsebene einsetze, schadet das (oder könnte schaden) oder ist das einfach nur redundant?

Schönes WE,
Sven