我有三个表:test_cases 表、schedule 表、aggregate_summary 表
测试用例
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;
最佳答案
要在触发器主体中执行查询,它们必须用分号分隔。为了让您的 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 ;
我认为触发器的主体并没有完全达到您想要的效果,但恐怕我不太清楚触发器所需的行为是什么。不过,至少现在它在语法上是有效的。
关于mysql - SQL 创建触发器来插入和更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35733569/