У меня есть БД для управления аэропортом. Я хочу попытаться вычислить разницу во времени между столбцами ArrivingDate и DepartingDate (оба типа DATETIME) в третий столбец с именем Flight_time (тип TIME) после любого INSERT в таблице FLIGHT_SCHEDULES.
Я пытался создать триггер для этого, но безуспешно. Я уже прочитал кое-что в Интернете о своей ошибке, но не смог найти то, что решило бы мою дилемму.
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, но результат был тот же.