Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Aktualizacja wyzwalacza MySql wybierz sumę po wstawieniu

Wypróbuj

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;

Oto SQLFiddle demo.

AKTUALIZUJ :Ponieważ wyzwalacze nie są dostępne, spróbuj zawinąć INSERT i UPDATE do procedury składowanej, takiej jak ta

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 ;

A potem użyj go

CALL AddTransaction(1, 10.50);

Oto SQLFiddle demo dla tego scenariusza.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utworzyć indeks na kolumnie MySQL na podstawie długości jej zawartości?

  2. Błąd ActiveRecord:SAVEPOINT active_record_1 nie istnieje

  3. CURRENT_DATE/CURDATE() nie działa jako domyślna wartość DATE

  4. Jak można przekonwertować sekundy (lub milisekundy) na znacznik czasu (lub po prostu ciąg, który wygląda jak data) w mySql

  5. mysql_connect VS mysql_pconnect