我有三个表test_cases表,一个schedule表,一个aggregate_summary表
test_cases
caseID | file_name
--------+-------------------------
1 | Test 1
2 | Test 2
3 | Test 3
时间表
| scheduleID | caseID | schedule_time
+------------+--------+---------------------
| 1 | 1 | 2016-02-29 02:15:00
| 2 | 2 | 2016-02-29 12:00:00
| 3 | 3 | 2016-02-27 12:00:00
| 4 | 2 | 2016-02-25 07:26:00
| 5 | 1 | 2016-02-26 07:37:00
| 6 | 2 | 2016-02-27 07:39:00
| 7 | 2 | 2016-02-28 07:25:00
| 8 | 1 | 2016-02-29 08:38:00
| 9 | 2 | 2016-02-29 07:08:00
aggregate_summary,其中包含start_time和文件名以及其他字段
我想创建一个触发器,因此在安排测试后,它将schedule_time放入start_time(在aggregate_summary表上),并将file_name(从test_cases)放入aggregate_summary表的file_name字段中。
我无法正确理解语法:
CREATE TRIGGER OnScheduleInsert AFTER INSERT ON schedule FOR EACH ROW BEGIN INSERT INTO aggregate_summary (start_time) VALUES(NEW.schedule_time)
UPDATE aggregate_summary SET file_name=(SELECT file_name FROM test_cases WHERE NEW.caseID=test_cases.caseID) END;
答案 0 :(得分:1)
要在触发器的主体中执行查询,必须用分号分隔。为了让您的MySQL客户端不将分号解释为CREATE TRIGGER
语句的结尾,您可能首先需要将分隔符更改为分号以外的其他内容,然后再将其更改回来。
DELIMITER //
CREATE TRIGGER OnScheduleInsert
AFTER INSERT ON schedule
FOR EACH ROW
BEGIN
INSERT INTO aggregate_summary (start_time) VALUES(NEW.schedule_time);
UPDATE aggregate_summary SET file_name=(SELECT file_name FROM test_cases WHERE NEW.caseID=test_cases.caseID);
END//
DELIMITER ;
我不认为触发器的主体完全符合您的要求,但我担心我不清楚触发器的期望行为是什么。不过,至少它现在在语法上是有效的。