Maison > base de données > tutoriel mysql > le corps du texte

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

PHPz
Libérer: 2023-09-06 18:17:06
avant
701 Les gens l'ont consulté

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)
Copier après la connexion

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 ;
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

À 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!

source:tutorialspoint.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal