【问题标题】:How to create MySQL trigger to copy newly inserted data in one table to another如何创建 MySQL 触发器以将一个表中新插入的数据复制到另一个表
【发布时间】:2014-11-26 21:17:43
【问题描述】:

我有 3 个 MySQL 表:table1、table2、table3。我正在尝试从 table1 和 table2 中提取特定内容,然后通过使用触发器将此提取的内容插入到 table3 中。每当数据插入 table1 时,我希望触发器插入这条新记录

CREATE trigger 'test_trigger' after insert on 'table1'

select a.fname, a.lname,b.address,b.contact 
from table1 a 
inner join table2
on a.table1_id=b.table2_id

insert into table3(fname,lname,address,contact)

END;

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    INSERT 语句可以插入由 SELECT 语句选择的值:

    insert into table3(fname, lname, address, contact)
        select a.fname, a.lname, b.address, b.contact 
          from table1 a 
         inner join table2
            on a.table1_id = b.table2_id
    

    请注意,您可能需要一个 WHERE 子句来限制每次插入的数据量。如所写,每次将任何行插入Table1时,两个表中的所有可连接数据都会插入Table3。

    【讨论】:

    • 这只适用于新插入的数据吗?
    • 没有。 SELECT 不仅限于新数据。您需要在 MySQL 中查找 CREATE TRIGGER 的语法,但通常有一种方法可以说出类似 REFERENCING NEW AS xyz 的内容,然后限定 WHERE 子句以仅选择新插入的数据(WHERE a.table1_id = xyz.table1_id 或类似内容)。
    【解决方案2】:
    CREATE trigger 'test_trigger' after insert on 'table1'
    
    insert into table3 (fname, lname, address, contact)
        select a.fname, a.lname,b.address,b.contact 
        from table1 a 
        inner join table2 on a.table1_id=b.table2_id
        where a.id = NEW.id
    
    END;
    

    未经测试,但应该可以工作...您在触发器中有 OLD 和 NEW,它们可以像表别名(例如您的 a)一样使用,对于只有 NEW 的插入,用于更新 NEW 和 OLD,用于删除旧

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多