mysql - SQL 创建触发器来插入和更新表

标签 mysql database-trigger

我有三个表: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/

相关文章:

c# - 在c#中单击按钮时显示包含sql数据的消息框

javascript - 在Firebase云函数中获取增量快照中的增量

mysql - 无法在 SQLYog 中创建触发器

postgresql - 防止删除一个用户的表记录并允许在 postgresql 中删除另一个用户

插入一行后触发更新两列的操作时Mysql错误1442

MySQL EXCEPT 等效项

MySQL根据列的最大值删除行

mysql - Laravel Sql 语法错误

php - 更新 MySQL 字段时更改的日期

MySQL : automatically update a column in another table with foreign key, 触发器还是什么?