在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;
但是,每当尝试创建触发器时,这会给我以下错误:
new.release_name
条款中的未知列where
。
为什么不识别new
关键字?
因为new被保留为系统字
参考:https://dev.mysql.com/doc/refman/8.0/en/keywords.html
请修改
new.release_name ==> `new`.`release_name`
等等..
这个错误比我想象的更愚蠢;
我直接在sql查询编辑器上工作,而不是在mysql工作台的触发器选项卡上,所以它没有正确解析new
关键字`。