MySQL Trigger FOR EACH ROW

Hi !

Ich hab eine kleine Verständnisfrage bei der es um Trigger in einer MySQL Datenbank geht.

Die MySQL Doku gibt folgende Syntax for:
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt

Jetzt steht in der letzten Zeile der Term, dass trigger_stmt FOR EACH ROW, also für jede Zeile ausgeführt wird.

Meine Frage ist jetzt, wird trigger_stmt für jede neueingefügte Zeile oder für jede Zeile der Tabelle eingefügt ?

Oder anders ausgedrückt, wenn ich in eine Tabelle mit Trigger und 100 Zeilen zwei Zeilen einfüge, wird dann das trigger_stmt 2 Mal oder 102 Mal ausgeführt ?

Servus,

FOR EACH ROW besagt, dass dein Statement für jede Zeile ausgeführt wird die das Event auslöst.

Wenn deine Tabelle also schon 100 Zeilen enthält und du fügst zwei hinzu,
wird dein z.B: AFTER INSERT Trigger für jede (=2) Zeile seine Aufgabe erfüllen.
Die vorhandenen Zeilen werden vom Trigger nicht berührt.

Gruss,
SomeOne

Hi,
sicher?
Ich war bisher der Meinung, dass der Trigger mit dem FOR EACH ROW Statement bei jedem geänderten Record aufgerufen wird und wenn dieses Statement weggelassen wird eben nur einmal.

Das heißt dem Beispiel zur Folge:
2x Mit dem Statement
1x ohne dem Statement obwohl 2 Record verändert worden sind.

Das natürlich nur bei Transaktionen die in einem SQL Statement mehrere Rekords aktualisieren, einfügen oder löschen.

Gruss
Joey

Hi,
sicher?
Ich war bisher der Meinung, dass der Trigger mit dem FOR EACH
ROW Statement bei jedem geänderten Record aufgerufen wird und
wenn dieses Statement weggelassen wird eben nur einmal.

Wenn ich FOR EACH ROW weglasse, sacht es mir ERROR

Hi,
habe keine Installation um es nun auszuprobieren.
Hier steht jedenfalls, dass es nicht verpflichtend ist.

http://forge.mysql.com/wiki/Triggers#FOR_EACH_ROW

Gruss
Joey

CREATE TRIGGER toresult
BEFORE
INSERT ON totrigger
INSERT INTO resulttrigger VALUES (’’,‚tim‘,‚1‘)

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‚INSERT INTO resulttrigger VALUES (‘’,‚tim‘,‚1‘)’ at line 1

CREATE TRIGGER toresult
BEFORE
INSERT ON totrigger
FOR EACH ROW
INSERT INTO resulttrigger VALUES (’’,‚tim‘,‚1‘)

Ihr SQL-Befehl wurde erfolgreich ausgeführt. ( die Abfrage dauerte 0.0274 sek. )

http://dev.mysql.com/doc/refman/5.1/de/create-trigge…

vielleicht mal das handbuch wechseln .

Hi ! Danke für die Antworten.

Ich wollte den Trigger benutzen, um eine Datenbanktabelle automatisch ältere Einträge archivieren zu lassen, hab ich aber jetzt doch dazu entschieden, dass über ein externes Programm zu automatisieren.

Hi!

Ich wollte den Trigger benutzen, um eine Datenbanktabelle
automatisch ältere Einträge archivieren zu lassen, hab ich
aber jetzt doch dazu entschieden, dass über ein externes
Programm zu automatisieren.

Und warum hast Du es nicht mit einem Datenbankjob gemacht? Stichwort: „Event“

Grüße,
Tomh