実際には、「FOR EACH ROW」とは、一致するすべての行が更新または削除されることを意味します。つまり、トリガーはすべての行に適用されるのではなく、影響を受けるテーブルのすべての行に対してトリガー本体が実行されるだけであると言えます。これを次の例で説明します。 -
この例では、次のように、Sample と Sample_rowaffected という 2 つのテーブルを作成します。-
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)
さて、トリガーを作成します。以下に示すように、テーブル "Sample" 内の値を削除する前に起動されるクエリが作成されます -
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 ;
ここで、次のクエリはテーブル "Sample" からいくつかの値を削除し、行数が削除されます。 @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)
次のクエリを使用すると、sample_rowaffected テーブルに挿入された削除の影響を受ける行の値を次のように確認できます -
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)
in 上記の例を見ると、「FOR EACH ROW」が一致するすべての行を更新または削除することを意味することは明らかです。
以上がMySQL トリガーの「FOR EACH ROW」はどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。