MySQL触发问题。怎么修呢?错误1442

时间:2019-05-14 18:47:05

标签: mysql triggers

我不知道如何使触发器工作。我已经设法使它顺利通过,但现在标题有问题。

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或随机输入是随机的,则在输入第二个输入时将其替换是没有意义的。

1 个答案:

答案 0 :(得分:0)

您的错误说明了一切:您无法更新(行入)与为其创建触发器的表。但是,您可以通过以下方式修改要插入的行:

  1. 首先,将触发时间从AFTER更改为BEFORE
  2. 其次,更改要插入的行

具有:

CREATE TRIGGER t_Payments BEFORE INSERT ON Payments
FOR EACH ROW
BEGIN
    -- Your magic here
    SET NEW.Total = ((@room)+(@serv));
END