【发布时间】:2025-12-02 19:00:02
【问题描述】:
正在处理mysql.5.7
这是我的bugs 表
MySQL [jira_statistics]> describe bugs;
+---------------------------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------------------------------------+--------------+------+-----+---------+-------+
| issue_key | varchar(45) | NO | PRI | NULL | |
| release_name | varchar(45) | YES | MUL | NULL | |
| issue_summary | varchar(200) | YES | | NULL | |
| story_points | int(11) | NO | | 0 | |
| qa_reopened | float | NO | | 0 | |
| done_reopened | float | NO | | 0 | |
此表通过定期调用 LOAD DATA LOCAL INFILE bugs <file.csv> 进行更新
无论何时发生此更新(可能会更新现有行和/或插入新行),我希望通过以下触发器更新另一个包含一些已生成统计信息的表
create trigger update_bugs_stats after insert on `jira_statistics`.`bugs` for each row
begin
delimiter ;
-- STORY POINTS -------------------------
SELECT AVG(story_points) INTO @avg_bugs_storypoints FROM `jira_statistics`.`bugs` WHERE release_name = new.release_name;
SELECT MAX(story_points) INTO @max_bugs_storypoints FROM `jira_statistics`.`bugs` WHERE release_name = new.release_name;
SELECT MIN(story_points) INTO @min_bugs_storypoints FROM `jira_statistics`.`bugs` WHERE release_name = new.release_name;
INSERT INTO storypoints_stats (release_name, avg_bugs_storypoints, max_bugs_storypoints, min_bugs_storypoints)
VALUES (relName, @avg_bugs_storypoints, @max_bugs_storypoints, @min_bugs_storypoints)
ON DUPLICATE KEY UPDATE
relName=new.release_name,
avg_bugs_storypoints=@avg_bugs_storypoints,
max_bugs_storypoints=@max_bugs_storypoints,
min_bugs_storypoints=@min_bugs_storypoints;
但是,每当尝试创建触发器时,都会出现以下错误:
where子句中的未知列new.release_name。
为什么无法识别new 关键字?
【问题讨论】:
-
分隔符语句应该在触发器定义之前。我想知道选择是否实际上是在触发器之外评估的,这可以解释错误消息(触发器之外没有新表)。