我不知道如何使触发器工作。我已经设法让它顺利通过,但现在我遇到了标题中的问题。
Here is a photo of a schema of given database:
非常感谢您的帮助或想法!
/* Trigger do liczenia Total w Platnosciach */
DELIMITER //
CREATE TRIGGER t_Payments AFTER INSERT ON Payments
FOR EACH ROW
BEGIN
/* Ciagniemy numer rezerwacji (ZALOZENIE: TYLKO JEDNO ZRODLO ROBIENIA REZERWACJI) */
SET @bookID=0;
SELECT b.BookID INTO @bookID
FROM Bookings b
ORDER BY b.BookID DESC
LIMIT 1;
/* Calosc Pokoju */
SET @room=0;
SELECT
TRUNCATE((DATEDIFF(b.DepDate,b.ArrDate)*r.Price),2) INTO @room
FROM Rooms r
INNER JOIN Bookings b ON r.RoomID = b.RoomID
WHERE
b.BookID = @bookID;
/* Calosc Uslug */
SET @serv=0;
SELECT
TRUNCATE(SUM(si.price),2) INTO @serv
FROM Bookings b
INNER JOIN Services se ON b.BookID = se.BookID
INNER JOIN ServInfo si ON se.code = si.code
WHERE
b.BookID = @bookID;
/* Kod wbicia w Payments Total*/
UPDATE Payments
SET Total=((@room)+(@serv))
WHERE PaymentID=@bookID;
END //
DELIMITER ;
错误 1442 (HY000):无法更新存储函数/触发器中的表“付款”,因为它已被调用此存储函数/触发器的语句使用。
触发器应该计算预订的费用。
稍后我会尝试让数据的输入变得不可能,因为输入 0 或一些随机的东西是没有意义的,如果它在提交时就会被替换。
最佳答案
您的错误说明了一切:您无法更新为其创建触发器的同一表(其中的行)。但是,您可以通过以下方式修改即将插入的行:
- 首先,将触发时间从
AFTER
更改为BEFORE
- 其次,更改要插入的行
与:
CREATE TRIGGER t_Payments BEFORE INSERT ON Payments
FOR EACH ROW
BEGIN
-- Your magic here
SET NEW.Total = ((@room)+(@serv));
END
关于MySQL 触发器问题。如何修复呢?错误 1442,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56136713/