3

我有兴趣创建一个在创建表时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,但要复制触发器?

PS 联系了开发人员。3.0.7.11随着新数据库的创建,将滚动更改以接受任意 SQL 执行。预计代码将在周一之前到达开发仓库。

4

1 回答 1

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 数据库包含几个只读表。它们实际上是视图,而不是基表,因此没有与它们关联的文件,并且您不能在它们上设置触发器

于 2013-06-27T21:02:53.363 回答