Я пытаюсь создать триггер, при котором вставка на одну таблицу обновляет другую. Это мой SQL-запрос:
CREATE TRIGGER makePayment AFTER INSERT ON Payments FOR EACH ROW
BEGIN
UPDATE Invoice
SET InvoiceClientPaid = SUM(InvoiceClientPaid + NEW.PaymentAmt)
WHERE InvoiceID = NEW.PaymentInvoiceID;
END;
Независимо от того, что я делаю, я получаю следующую ошибку:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 6
Я не думаю, что это связано с SUM, потому что попытка basic = 1 в команде SET дает мне точную ошибку. В строке 6 нет строки, которая очень запутанна?
Если вы вводите этот запрос непосредственно в MySQL, вам нужно будет изменить разделитель перед запросом, используя (например) DELIMITER//
, иначе он думает, что запрос заканчивается на ;
в конце вашего оператора UPDATE
. Затем MySQL видит END
без ничего и жалуется на ничего (''
). Поэтому попробуйте следующее:
DELIMITER //
CREATE TRIGGER makePayment AFTER INSERT ON Payments FOR EACH ROW
BEGIN
UPDATE Invoice
SET InvoiceClientPaid = SUM(InvoiceClientPaid + NEW.PaymentAmt)
WHERE InvoiceID = NEW.PaymentInvoiceID;
END; //
DELIMITER ;
Error Code: 1419. You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
Я использую Google Cloud SQL и поэтому, по-видимому, Супер привилегия не существует.