在创建表时创建TRIGGER以创建TRIGGER

时间:2013-06-27 20:59:41

标签: mysql triggers ddl-trigger

我有兴趣创建一个TRIGGER,在创建表时创建TRIGGER

在mysql数据库中,我注意到模式的表返回时为:

select TABLE_NAME, TABLE_SCHEMA from information_schema.TABLES;

以下是创建TRIGGER的正确方法,以创建绑定到其他架构的TRIGGER吗?

DELIMITER //
CREATE TRIGGER `information_schema`.`argus_table_creation`
    AFTER INSERT on `TABLES`
    BEGIN
        --trigger here
        CREATE TRIGGER `argus`.`after_argus_insert` --create trigger bound to DB 'argus', titled 'after_insert'
        AFTER INSERT ON `argus_table_2013_06_27` FOR EACH ROW -- perform the trigger, `after insert`, on the `argus_table_2013_06_27` table, `for each row` that is inserted.
        BEGIN
                INSERT INTO argus.historic_argus_saddrdaddr(saddr, daddr)
                (
                SELECT saddr, daddr
                FROM (SELECT NEW.saddr, NEW.daddr) as derived
                WHERE NOT EXISTS (SELECT saddr, daddr FROM argus.historic_argus_saddrdaddr where historic_argus_saddrdaddr.saddr = derived.saddr and historic_argus_saddrdaddr.daddr = derived.daddr)
                );
        END//
    END//
DELIMITER;

推理:

我使用客户端应用程序(rasqlinsert)自动创建与给定命名方案匹配的新表(您可以使用strftime(f))。我需要在生成这些自动生成的表时创建一个触发器。这就是我寻找解决方案的原因。

另一种可能的解决方案

是否可以建议软件开发人员使用类似于CREATE TABLE n LIKE x的命令,但是让它复制触发器?

P.S。 联系开发将使用3.0.7.11进行滚动更改以接受任意SQL以及创建新数据库。预计代码将在周一之前达到dev repo。

1 个答案:

答案 0 :(得分:4)

您无法在information_schema数据库中的表上设置触发器。


你能提供一个引文吗? - mbrownnyc

http://dev.mysql.com/doc/refman/5.1/en/information-schema.html

  

MySQL 5.1参考手册

     

第20章INFORMATION_SCHEMA表

     

INFORMATION_SCHEMA数据库的使用说明

     

INFORMATION_SCHEMA是每个MySQL实例中的数据库,该实例存储有关MySQL服务器维护的所有其他数据库的信息。 INFORMATION_SCHEMA数据库包含几个只读表。它们实际上是视图,而不是基表,因此没有与它们相关联的文件,您无法在它们上设置触发器