新插入的多表数据更新的触发器或事务

时间:2014-03-05 07:46:21

标签: mysql sql

我有三个名为table1table2table3的表格。

骷髅就像下面

table1

table2

table3

table1包含usernamepassword数据。 Table2包含他与其他用户的关系。

所以我的要求是当用户注册时,值将被插入table1。并且用户还将发送其他用户的列表以指定他的引用。例如,当添加u1时,他已发送[u2, u3, u5]。由于u2 and u3已经注册,因此应将这两个用户添加到table2,如下所示。每当注册table2时,都应添加u1 - u5 u5

所以我维护table3来维护未注册的用户。

准确地说,这就是我想要做的事情。

table1中添加某个用户时,想要引发一个触发器,该触发器将使用新插入的值检查table3 field_2值。无论哪个行匹配,都应插入table2,如同u2u3一样。

以下是我的尝试,但我对如何继续进行模糊不清

create trigger transaction_state after update on table1
      begin 
    insert into table2
       select * from table1 where field_2 = /* newly updated */;
      end;

1 个答案:

答案 0 :(得分:2)

根据您的输入,我认为有两个触发器要写,

  1. table3上插入触发器,检查field_2是否已注册。如果是,则记录(field_1,field_2)将插入table2

  2. 在'table1'上插入触发器,它会选择uid显示为field_2的所有行,并将所有这些行插入table2

  3. 如果您正在使用第三方数据库,请告诉我这是否合理并符合您的要求以及它的可行性。

    CREATE TRIGGER trigger1
    AFTER INSERT ON table3
    FOR EACH ROW
        BEGIN
                 INSERT INTO table2
                 SELECT NEW.field_1, NEW.field_2
                   FROM table1
                   WHERE table1.uid = NEW.field_2
    
        END;
    
    
    
    
    CREATE TRIGGER trigger2
        AFTER INSERT ON table1
        FOR EACH ROW
            BEGIN
                     INSERT INTO table2
                     SELECT table3.field_1, table3.field_2
                       FROM table3
                       WHERE table3.field_2 = NEW.uid
    
            END;