CreatetableSample(idint,valuevarchar(20));QueryOK,0rowsaffected(0.47sec)mysql>InsertintoSample (id ,valeur"/> CreatetableSample(idint,valuevarchar(20));QueryOK,0rowsaffected(0.47sec)mysql>InsertintoSample (id ,valeur">

Maison >base de données >tutoriel mysql >Comment fonctionne « POUR CHAQUE LIGNE » dans les déclencheurs MySQL ?

Comment fonctionne « POUR CHAQUE LIGNE » dans les déclencheurs MySQL ?

PHPz
PHPzavant
2023-09-06 18:17:06759parcourir

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

En fait, "POUR CHAQUE LIGNE" signifie chaque ligne correspondante mise à jour ou supprimée. En d’autres termes, nous pouvons dire que le déclencheur ne s’applique pas à chaque ligne, il indique simplement que le corps du déclencheur est exécuté pour chaque ligne de table affectée. Nous pouvons illustrer cela avec l'exemple suivant -

Example

Dans cet exemple, nous créons deux tables, Sample et Sample_row, affectées comme suit -

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)

Maintenant, nous allons créer un déclencheur qui supprimera la table Triggered avant toute valeur dans " Sample" comme indiqué ci-dessous -

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 ;

Maintenant, la requête suivante supprimera certaines valeurs de la table "Sample" et le nombre de lignes supprimées sera stocké dans la variable utilisateur @count -

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)

Avec l'aide de Avec ce qui suit requête, nous pouvons vérifier les valeurs des lignes affectées par la suppression, insérées dans la table sample_rowaffected comme suit -

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)

À l'aide de l'exemple ci-dessus, il est clair que "POUR EACH ROW" signifie chaque ligne correspondante qui est mis à jour ou supprimé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer