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