如何为嵌套表创建触发器

时间:2016-05-21 05:08:21

标签: mysql sql sql-server database

我尝试为table3创建触发器以插入新行每个我都有关于触发器的基本信息这是我试图做的但是我的错误执行被中断了

        +------------+
        | tableZero  |
        +------------+
        |tableZ_ID(PK|
        +------------+
        |tableZ_Name |
        +------------+
        |table1_ID(FK|
        +------------+

        +------------+
        | table1     |
        +------------+
        |table1_ID(PK|
        +------------+
        |table1_Name |
        +------------+

        +------------+
        | table2     |
        +------------+
        |table2(PK)  |
        +------------+
        |table1 (FK) |
        +------------+
        |table2Info  |
        +------------+


        +------------+
        | table3     |
        +------------+
        |tableZ_ID(FK|
        +------------+
        |table2_ID(FK|
        +------------+
$scope.setColor = function(appColor){     
        $scope.data = ThemeColors.setColor(appColor);
}

2 个答案:

答案 0 :(得分:0)

根据您的表格设计,必须在tableZero中提供数据,否则会产生与参考密钥相关的错误。

表1 - >表0

如果想要更多信息,请告诉我

答案 1 :(得分:0)

在表2的触发器中,您引用了new.tableZ_ID,但tableZ_ID中没有table2列。

要获得tableZ_ID,您必须将table2值重新加入包含tableZ_ID列的表格,该列根据您的架构tableZero。鉴于您的FK关系,为了从table2tableZero,您必须通过table1。触发器看起来像这样:

delimiter #
create trigger TABLE3_INSERT_TRIGGER  after insert on table2
for each row
begin
INSERT INTO table3 (tableZ_ID, table2_ID) 
SELECT t0.tableZ_ID, new.table2_ID
FROM table1 t1 
INNER JOIN tableZero t0 on t1.table1_ID = t0.table1_ID
WHERE t1.table1_ID = new.table1_ID;
end#

delimiter ;