我有一个数据库来管理机场。我想尝试在表FLIGHT_SCHEDULES中的任何INSERT之后,将ArrivingDate和DepartingDate列(均为DATETIME类型)之间的时间差计算为名为Flight_time(TIME类型)的第三列。

我试图为此创建一个触发器,但没有成功。我已经在互联网上阅读了一些有关我的错误的信息,但是找不到解决我的困境的东西。

This is the table:

CREATE TABLE FLIGHT_SCHEDULES(
    id INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
    Flight INT(10) UNSIGNED NOT NULL,
    Airplane INT(10) UNSIGNED NOT NULL,
    DepartingDate DATETIME NOT NULL,
    ArrivingDate DATETIME NOT NULL,
    Flight_time TIME DEFAULT '00:00:00',
    CONSTRAINT flight_unique UNIQUE (Flight),
    CONSTRAINT fk_scheduled_flight_id FOREIGN KEY (Flight) REFERENCES FLIGHTS(id) ON UPDATE CASCADE ON DELETE CASCADE,
    CONSTRAINT fk_scheduled_airplane_id FOREIGN KEY (Airplane) REFERENCES AIRPLANES(id) ON UPDATE CASCADE ON DELETE CASCADE
);

This is the trigger I created:

delimiter //
CREATE TRIGGER calculate_flightTime2 BEFORE INSERT ON FLIGHT_SCHEDULES FOR EACH ROW
BEGIN
    UPDATE FLIGHT_SCHEDULES
    SET NEW.Flight_time = TIMEDIFF(new.ArrivingDate, new.DepartingDate);
END //


我可以毫无问题地创建触发器,但是我尝试在表中插入新行时收到以下错误消息:

错误代码:1442。无法更新存储函数/触发器中的表“ flight_schedules”,因为调用该存储函数/触发器的语句已使用该表。 0.000秒

请注意,我也尝试创建AFTER触发器,但是结果是相同的。

最佳答案

这是mysql的限制,因此您不会陷入无尽的循环。

尝试这样的事情。


CREATE TRIGGER calculate_flightTime2
  BEFORE INSERT
  ON FLIGHT_SCHEDULES
  FOR EACH ROW
BEGIN
  IF NEW.Flight_time = '00:00:00' THEN
    SET NEW.Flight_time = TIMEDIFF(new.ArrivingDate, new.DepartingDate);
  END IF;
END

关于mysql - 计算两列到另一列之间的时间差AFTER\BEFORE INSERT在表中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56527818/

10-13 05:59