触发在表A上插入后将表C中的值插入表B中

问题描述 投票:-1回答:2

我正在尝试在mysql中创建一个触发器,在向表A中插入新记录后,使用表C中的值更新表B。我尝试了以下代码的一些变体,但无法获取工作。谁能指出我正确的方向?

 delimiter //
 CREATE TRIGGER updateC AFTER Insert ON Table A
       FOR EACH ROW in TableB
       BEGIN
           IF TableB.Group = 1 THEN
               Insert into TableC(inserthere) values (TableB.AddThis);
           END IF;
       END;//
delimiter ;

表A包含字段ProjectID |任务组。

表B包含字段ID | DefaultTask |任务组。

表C包含字段ID | ProjectID | DefaultTask。

当将新的ProjectID和TaskGroup添加到表A时,我想在TableB中找到具有相同TaskGroup的所有DefaultTask,然后将这些DefaultTasks和ProjectID插入为表C中的新记录

mysql syntax triggers
2个回答
0
投票

有人能指出我正确的方向吗?

插入到A中的记录必须定义B中必须更新的记录,以及C中必须为此更新取值的记录。

例如,可能是

CREATE TRIGGER updateC 
AFTER INSERT 
ON Table A
FOR EACH ROW
UPDATE B, C
SET B.field1 = C.field2
WHERE B.field3 = NEW.field4
  AND C.field5 = NEW.field6;

0
投票

在评论后解释。

这将向您展示如何执行此操作,您必须测试INSERT查询,并假定id是自动递增。

每个NEW.columname是插入的行的值。

使用INSERT INTO ... SELCT,您可以从Taböleb的所有符合要求的值中插入散装插入件的公头

 DELIMITER //
 CREATE TRIGGER updateC AFTER Insert ON TableA
       FOR EACH ROW
       BEGIN
        INSERT INTO TableC (ProjectID,DefaultTask) SELECT NEW.ProjectID,DefaultTask
                                                    FROM TABLEB 
                                                    WHERE TaskGroup = NEW.TaskGroup;
       END;//
DELIMITER ;

FYI:以大写形式编写sql Comands,它使读取变得更加简单

© www.soinside.com 2019 - 2024. All rights reserved.