Tatsächlich bedeutet „FÜR JEDE REIHE“, dass jede übereinstimmende Zeile aktualisiert oder gelöscht wird. Mit anderen Worten können wir sagen, dass der Trigger nicht für jede Zeile gilt, sondern lediglich, dass der Triggerkörper für jede betroffene Tabellenzeile ausgeführt wird. Wir können dies anhand des folgenden Beispiels veranschaulichen:
In diesem Beispiel erstellen wir zwei Tabellen, Sample und Sample_rowaffected, wie folgt: -
mysql> Create table Sample(id int, value varchar(20)); Query OK, 0 rows affected (0.47 sec) mysql> Insert into Sample(id, value) values(100, 'same'),(101, 'Different'),(500, 'excellent'),(501, 'temporary'); Query OK, 4 rows affected (0.04 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> Select * from Sample; +------+-----------+ | id | value | +------+-----------+ | 100 | same | | 101 | Different | | 500 | excellent | | 501 | temporary | +------+-----------+ 4 rows in set (0.00 sec) mysql> Create table Sample_rowaffected(id int); Query OK, 0 rows affected (0.53 sec) mysql> Select Count(*) as ‘Rows Affected’ from sample_rowaffected; +---------------+ | Rows Affected | +---------------+ | 0 | +---------------+ 1 row in set (0.10 sec)
Jetzt erstellen wir einen Trigger, der die Tabelle Triggered vor jedem Wert in „ löscht. Beispiel“ wie unten gezeigt –
mysql> Delimiter // mysql> Create trigger trigger_before_delete_sample BEFORE DELETE on Sample -> FOR EACH ROW -> BEGIN -> SET @count = if (@count IS NULL, 1, (@count+1)); -> INSERT INTO sample_rowaffected values (@count); -> END ; -> // Query OK, 0 rows affected (0.15 sec) mysql> Delimiter ;
Nun löscht die folgende Abfrage einige Werte aus der Tabelle „Sample“ und die Anzahl der gelöschten Zeilen wird in der Benutzervariablen @count gespeichert –
mysql> Delete from Sample WHERE ID >=500; Query OK, 2 rows affected (0.11 sec) mysql> Select @count; +--------+ | @count | +--------+ | 2 | +--------+ 1 row in set (0.03 sec)
Mit Hilfe von Folgendes Abfrage können wir die Werte der von der Löschung betroffenen Zeilen überprüfen, die wie folgt in die Tabelle „sample_rowaffected“ eingefügt werden –
mysql> Select Count(*) as 'Rows Affected' from sample_rowaffected; +---------------+ | Rows Affected | +---------------+ | 2 | +---------------+ 1 row in set (0.00 sec) mysql> Select * from Sample; +------+-----------+ | id | value | +------+-----------+ | 100 | same | | 101 | Different | +------+-----------+ 2 rows in set (0.00 sec)
Mit Hilfe des obigen Beispiels wird klar, dass „FÜR JEDE REIHE“ jede übereinstimmende Zeile bedeutet aktualisiert oder gelöscht.
Das obige ist der detaillierte Inhalt vonWie funktioniert „FOR EACH ROW' in MySQL-Triggern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!