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

MySql Triggerは、挿入後に選択合計を更新します

    試してみてください

    CREATE TRIGGER NewTrigger 
    AFTER INSERT ON Transactions
    FOR EACH ROW
    UPDATE Accounts a
       SET a.AccountBalance = 
        (SELECT SUM(TransactionAmount) 
           FROM Transactions
          WHERE AccountID = a.AccountID)
     WHERE a.AccountID = NEW.AccountID;
    

    これがSQLFiddle です。 デモ。

    更新 :トリガーを使用できないため、INSERTをラップしてみてください およびUPDATE このようなストアドプロシージャに

    DELIMITER $$
    CREATE PROCEDURE AddTransaction(IN aid INT, amount DECIMAL(11, 2)) 
    BEGIN
      START TRANSACTION;
      INSERT INTO Transactions (AccountID, TransactionAmount)
      VALUES (aid, amount);
      UPDATE Accounts a
         SET a.AccountBalance = 
          (SELECT SUM(TransactionAmount) 
             FROM Transactions
            WHERE AccountID = a.AccountID)
       WHERE a.AccountID = aid;
       COMMIT;
    END $$
    DELIMITER ;
    

    そしてそれを使用します

    CALL AddTransaction(1, 10.50);
    

    これがSQLFiddle です。 そのシナリオのデモ。




    1. Laravelが3つのテーブルに参加

    2. SQLiteデータ型

    3. NHibernateを使用して同じASP.NETアプリでOracleとSQLServerの両方をサポートするための推奨事項

    4. 挿入時:列参照スコアがあいまいです