mysql - 创建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 表中每个航班的轮次表中的相关轮次。
解决方案
您可以将触发器简化为:
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)
。
推荐阅读
- ios - 如何在 VS 代码中呈现来自 info.plist 的变量或数据?(反应原生)
- sharepoint - 仅为图库中提交表单。在电源应用程序中选择的项目
- python - 循环遍历数据框列中的每个值
- node.js - 使用 Powershell 将对象导出到 JSON 时,文件 l 中包含奇怪的字符
- google-cloud-platform - 在推送时启用 Pub/Sub 授权后无法在端点上接收通知
- c# - 如何在 C# 中将新部分添加到应用程序配置文件
- javascript - 使用 setInterval 无法在异步函数中达到值 - JavaScript
- python - 为什么在 Django App 中显示“django.core.management.base.SystemCheckError”& 无法运行服务器
- node.js - 反应原生无法解析模块util
- vue.js - 如何解决“通过导航守卫从'/'到'/dashboard'时重定向”错误?