sql触发器将行插入两个表

时间:2010-12-23 20:42:49

标签: mysql sql triggers

我一直在寻找一种方法来创建一个触发器,将相同的行插入到具有相同值的两个表中。

例如,插入后会立即将新行插入pushNotificationQueue,我希望将相同的行插入到消息中。

我试过这个

CREATE TRIGGER add_to_messages
after insert on mbb_pushNotificationQueue
FOR EACH ROW
insert into mbb_messages select * from mbb_pushNotificationQueue

唯一的问题是它会通过并添加之前已添加的条目。

5 个答案:

答案 0 :(得分:4)

您必须说明您正在使用哪些rdbms。 无论如何,你必须使用一个通常名为插入或类似的特殊表。

这适用于Sql Server:

INSERT INTO mbb_messages SELECT * FROM INSERTED

Sybase之类的其他人使用REFERENCES子句来获取新插入的记录:

create trigger TriggerName after insert on
TableName
referencing new as new_name

对于MySQL(您似乎使用它),您可以使用NEW表来引用新插入的记录:

CREATE TRIGGER add_to_messages
after insert on mbb_pushNotificationQueue
FOR EACH ROW BEGIN
    insert into mbb_messages select * from NEW;
END;

答案 1 :(得分:2)

您需要将列名称与new关键字一起使用。请在下面找到触发器:

DELIMITER $$
CREATE TRIGGER add_to_message
after insert on mbb_pushNotificationQueue
FOR EACH ROW BEGIN
    insert into mbb_oushNotificationQueue(`col1`, `col2`) values(new.col1, new.col2);
END$$
DELIMITER ;

答案 2 :(得分:1)

首先,我说使用带有select *语句的insert-select确实是个坏主意。原因是您永远无法预测从选择中返回的列的顺序。

其次,假设SQL Server,我建议使用以下内容:

create trigger add_to_message
    instead of insert on mbb_pushNotificationQueue
    for each row 
as
    begin transaction
        insert into mbb_oushNotificationQueue (col1, col2, col3)
            select col1, col2, col3
                from inserted

        insert into mbb_messages (col1, col2, col3)
            select col1, col2, col3
                from inserted

       if @@ERROR_LEVEL = 0
           commit
      else
           rollback

<强>声明:

  

此代码尚未经过测试,可能需要一些小修复,但很好地说明了这个想法。

答案 3 :(得分:1)

我最终使用

CREATE TRIGGER add_to_messages
after insert on mbb_pushNotificationQueue
FOR EACH ROW
INSERT INTO mbb_messages SET messageID = NEW.messageID, 
toUserID = NEW.toUserID, 
fromUserID =  NEW.fromUserID, message = NEW.message, dateReceived = NEW.dateReceived

感谢所有发帖的人。

答案 4 :(得分:0)

所以只添加最后添加的记录。

insert into mbb_messages select blah from mbb_pushNotificationQueue where blah meets some criteria....

有max(id)或其他东西。