0

我有三个表,一个 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

具有 start_time 和文件名等字段的 aggregate_summary

我想创建一个触发器,以便在安排测试后将 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;
4

1 回答 1

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 ;

我不认为触发器的主体完全按照您的意愿行事,但恐怕我不太清楚触发器的期望行为是什么。尽管如此,至少它现在在语法上是有效的。

于 2016-03-01T21:35:59.770 回答