首页 > 解决方案 > 创建mysql触发器可以读取超时而没有错误

问题描述

我正在尝试创建一个新触发器,一旦将新行插入到特定表中,它将将数据插入到新表中。

我试图延长超时,检查语法,到目前为止没有任何问题,但由于我是创建触发器的新手,我希望这是正确的方法并且需要一些指导。

这是我要创建的触发器-

DROP TRIGGER IF EXISTS `dcs`.`cb_flights_AFTER_INSERT`;

DELIMITER $$
USE `dcs`$$
CREATE DEFINER = CURRENT_USER TRIGGER `dcs`.`cb_flights_AFTER_INSERT` AFTER INSERT ON `cb_flights` FOR EACH ROW
BEGIN
    DECLARE round INT(11);
   -- variable declarations

   set @round = (select r.id
    from dcs.rounds r
    join dcs.maps m
    on m.pk = r.map_fk
   where NEW.map_fk = r.map_fk 
    and NEW.era_fk = r.era_fk 
    and 
    ((NEW.takeoff_time > r.start_time and NEW.takeoff_time < r.end_time) 
    or 
    (NEW.takeoff_time > r.start_time and r.end_time is null)));

   -- trigger code
   insert into flights_rounds (flight_fk, round_fk)
   values (NEW.flight_fk, round);
END$$
DELIMITER ;

这是相关的表格 -

Table: cb_flights
Columns:
pk int(11) AI PK 
ucid varchar(50) 
takeoff_time datetime 
end_time datetime 
end_event varchar(45) 
side varchar(45) 
kills int(11) 
type varchar(45) 
map_fk int(11) 
era_fk int(11)

Table: rounds
Columns:
id int(11) AI PK 
round_id int(11) 
map_fk int(11) 
era_fk int(11) 
start_time datetime 
end_time datetime 
winner varchar(45) 
tour date

Table: maps
Columns:
pk int(11) AI PK 
map varchar(45)

Table: eras
Columns:
pk int(11) AI PK 
era varchar(45)

Table: flights_rounds
Columns:
flight_fk int(11) PK 
round_fk int(11)

我希望对于 cb_flights 表中的每个插入行,flights_rounds 表中的触发器将创建一个新行,该行将指示来自 cb_flights 表中每个航班的轮次表中的相关轮次。

标签: mysqlsqltriggers

解决方案


您可以将触发器简化为:

begin   
    insert into flights_rounds (flight_fk, round_fk)
       select NEW.flight_fk, r.id
       from dcs.rounds r join
            dcs.maps m
            on m.pk = r.map_fk
       where NEW.map_fk = r.map_fk and
             NEW.era_fk = r.era_fk and
            ((NEW.takeoff_time > r.start_time and NEW.takeoff_time < r.end_time) or
             (NEW.takeoff_time > r.start_time and r.end_time is null)
            );
end;

round这也解决了和之间的混淆@round

这可能无法解决性能问题。为此,我建议使用 和 上的rounds(map_fk, era_fk, start_time, end_time)索引maps(pk)


推荐阅读