sql >> データベース >  >> RDS >> Mysql

トリガーを使用して挿入後に別のテーブルを更新しますか?

    大量のデータを期待していない場合は、ビューまたはストアドプロシージャを使用して、その場で計算し、実際の量を返します。長期的には頭痛の種を大幅に減らすことができます。

    あなたのビュー(実際のビュー)は次のようになります

    CREATE VIEW vw_table2_sum AS
    SELECT product, SUM(issued_qty) qty
      FROM Table2
     GROUP BY product;
    
    CREATE VIEW vw_table1 AS
    SELECT t.id, t.product, t.qty - COALESCE(v.qty, 0) qty
      FROM Table1 t LEFT JOIN vw_table2_sum v
        ON t.product = v.product;
    

    私たちがするとき

    SELECT * FROM vw_table1;
    

    取得します

    | ID |  PRODUCT | QTY |
    -----------------------
    |  1 |    mouse |   8 | -- the quantity is current
    |  2 | keyboard |  15 |
    |  3 |  monitor |   8 |
    

    これがSQLFiddle です。 デモ

    何らかの理由でトリガーを使用して在庫数を管理したい場合は、次のようになります

    CREATE TRIGGER tg_ai_table2
    AFTER INSERT ON table2
    FOR EACH ROW
      UPDATE Table1
         SET qty = qty - NEW.issued_qty
       WHERE product = NEW.product;
    

    こちらがSQLFiddle です。 デモ




    1. MySQL:OR句にインデックスを付ける方法

    2. MySQLデータファイルは縮小しません

    3. Amazon RDS(MySQLまたはMariaDB)をオンプレミスサーバーに移行する

    4. 複数の自己結合をリサイクルするmysqlクエリを組み合わせる