更新刚刚插入的行 - 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
有没有办法更新触发器中刚刚插入的行? 示例:
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