我有一个数据库来管理机场。我想尝试在表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/