Обновленный ответ
Это то, что, я думаю, вы хотите, предполагая, что от Account
до Transaction
является отношением 1: N с ключом Number
/ AccountNumber
:
DELIMITER //
-- Assumptions:
-- 1. Transaction.AccountNumber is F.K. REFERENCES Account(Number)
-- 2. Account.Number is UNIQUE
--
CREATE TRIGGER trg_bi_transaction BEFORE INSERT ON Transaction
FOR EACH ROW
BEGIN
-- Adjust account balance (if permitted)
--
UPDATE Account
SET CreditBalance = CreditBalance + NEW.Amount
WHERE Number = NEW.AccountNumber
AND
(CreditBalance + NEW.Amount) < CreditLimit;
-- Was the adjustment valid/permitted?
--
SET NEW.Valid = (ROW_COUNT() = 1);
END //
DELIMITER ;
Этот триггер попытается ОБНОВИТЬ надлежащий Account
для любого данного Transaction
, если позволяет CreditLimit
.Поле Valid
будет установлено равным 1, если ОБНОВЛЕНИЕ успешно выполнено, и 0, если оно не выполнено.
Оригинальный ответ
Триггеры MySQL не поддерживают предложения WHERE уровня триггера.Переместите проверку Number / NEW.AccountNumber внутри тела триггера.