Mysqlでafter insert update triggerの設定方法につきまして。


お世話になります。どうかご指導、アドバイス等頂けませんでしょうか。

以下の様な、tbl_productsにデータがinsertされた直後に起動させるトリガーをmysqlで作成しましたが、データを新規にtbl_productsにinsertしても起動いたしません。

[code]

    CREATE TRIGGER `Percent` AFTER INSERT ON `tbl_products`
     FOR EACH ROW BEGIN
    UPDATE
      tbl_products t1,
      ( SELECT id, (rate * number) AS prt
        FROM tbl_products GROUP BY id
      ) t2
    SET
      t1.option = t2.prt
    WHERE
      t1.id = t2.id
    END
    
[/code]

代わりに、上記のBEGIN～ENDの中にある記述をphpMyAdminのSQLから実行すると期待通りの結果になります。（計算結果prtがtbl_productsのカラムoptionに代入されます）

ですので、mysql上でのトリガーの作成方法に問題があるのではないかと考えておりますが、なぜデータをtbl_productsにinsertしてもトリガーを起動させないかご指導頂けませんでしょうか。

~~~~~～～～～～～～～～～～～～～～～  
別テーブルを使用しての記述

[code]

    CREATE TRIGGER `Percent` AFTER INSERT ON `tbl_products`
     FOR EACH ROW BEGIN
    UPDATE
      tbl_product_rate t1,
      ( SELECT tbl_products.id, (rate * number) AS prt
        FROM tbl_products left join tbl_products_rate on tbl_products.id =   tbl_products_rate.id GROUP BY id
      ) t2
    SET
      t1.option = t2.prt
    WHERE
      t1.id = t2.id
    END
    
[/code]




MySQLトリガーはそのトリガーが設定されているテーブルの自体の改変は認めていません。  
再帰的な呼び出しになる可能性があるからですかね？

「ストアドファンクションまたはトリガーは、そのストアドファンクションまたはトリガーを呼び出したステートメントによって (読み取りまたは書き込みに)
すでに使用されているテーブルを変更できません。」  
<https://dev.mysql.com/doc/refman/5.6/ja/stored-program-restrictions.html>

\--  
追記  
解決方法としては  
・アプリケーションで実装する。  
・別テーブルに書き出してSELECTする場合は別テーブルをJOINする  
・INSERT,UPDATE,DELETE用のテーブルを作り、トリガーを利用して本テーブルに同じようにINSERT,UPDATE,DELETEを実施しさらにやりたいトリガーを実施する  
などいくつか方法があると思います。

