2016-03-01 137 views
0

我有三個表一test_cases表,計劃表,一個aggregate_summary表SQL創建觸發器插入和更新表

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和文件名等字段

我想創建e是一個觸發器,因此在計劃測試之後,它會將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; 

回答

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 ; 

我不認爲觸發的身體挺你想要做什麼它,但我怕我真的不明確的觸發器的期望的行爲是什麼。儘管如此,至少它現在在語法上是有效的。