Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie funktioniert „FOR EACH ROW' in MySQL-Triggern?

PHPz
Freigeben: 2023-09-06 18:17:06
nach vorne
701 Leute haben es durchsucht

MySQL 触发器中的“FOR EACH ROW”如何工作?

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:

Example

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)
Nach dem Login kopieren

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 ;
Nach dem Login kopieren

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage