更新刚刚插入的行 - mysql 触发器

Updating just insered row - mysql Trigger

有没有办法更新触发器中刚刚插入的行? 示例:

Tables: Plane
        Flight

每次插入航班时

   nbr             departure              arrival          plane  route
('CA 000', '2020-02-11T13:10:00', '2020-02-11T15:15:00', 'I-BIXS', '1'),

我需要更新默认设置为 NULL 的两列:“free_seats”、“luggage_space” 这两个值都包含在平面 table.

最好的办法是将这些值设置为与其他值相同的默认值 table,但这似乎不可能。因此,我尝试使用触发器,但似乎不允许在触发器中访问时更新 table。我也尝试在触发器内调用一个过程,但出现了同样的错误(错误代码:1442。无法更新 table 'flight' in stored function/trigger 因为它已被语句使用调用了这个存储 function/trigger."

这是我试过的:

DELIMITER $$
CREATE TRIGGER set_dfflight
AFTER INSERT
ON flightFOR EACH ROW
BEGIN
    UPDATE flight
    INNER JOIN plane on plane.reg=flight.plane
    SET flight.free_seats = plane.seats
         , flight.luggage_space = plane.luggage_space;
END$$

这些列不是外键,因为它们必须仅在插入时具有相同的值。

平面实例是这样的:

  reg                 name               seats   luggage_space
('I-BIXS', 'AIRBUS INDUSTRIE-A 321-112', '245', '145'),

不,您不能 UPDATE table 触发器是 运行 的,因为这可能会造成无限循环。

您可以修改 BEFORE INSERT 触发器中的字段,但不能修改 AFTER INSERT 触发器中的字段。

这是一个例子:

CREATE TRIGGER set_dfflight
BEFORE INSERT
ON flight FOR EACH ROW
BEGIN
    DECLARE fs INT;
    DECLARE ls INT;

    SELECT seats, luggage_space INTO fs, ls
    FROM plane
    WHERE plane.reg = NEW.plane;

    SET NEW.free_seats = fs;
    SET NEW.luggage_space = ls;
END