【问题标题】:Is there any way to automatically create a trigger on creation of new table in MySQL?有没有办法在 MySQL 中创建新表时自动创建触发器?
【发布时间】:2010-03-26 10:37:13
【问题描述】:

有没有办法在 MySQL 中自动创建新表创建触发器?

【问题讨论】:

  • 您通常不应该动态创建新表。表结构应该是静态的。你想做什么?
  • 你是在创建表格而不是添加行吗???
  • 我正在为 Audit Trial 准备脚本,在这种情况下,我遇到了这种情况,如果创建了新表怎么办?在这种情况下,我将无法使用表所需的触发器来跟踪数据更改..因此,如果我可以创建触发器作为查找新表创建的方法...请帮助我解决这个问题..
  • 请参阅 OP 与此相关的其他问题:stackoverflow.com/questions/2522053/…

标签: mysql triggers


【解决方案1】:

正如我在your other question 中指出的那样,我认为这里需要进行流程和安全审查。这是一个经过审核的数据库,因此任何人(尤其是第三方服务提供商)都不应在您不知情的情况下在您的数据库中创建表。

您遇到的问题是,除了正在创建的新表之外,您还需要创建另一个表来存储审核/更改的记录,该表的结构与原始表相同,可能时间/日期和用户列。如果第三方提供商正在创建此表,他们将不知道要创建审计表,因此即使您可以动态生成触发器,它们也无法工作。

不可能创建一个单独的表来保存数据库中所有其他表的所有更改记录,因为表之间的结构不可避免地不同。

因此:向您自己和/或您的团队提出所有更改请求(例如,提供者想要创建 TableX,他们提交更改请求(包括 SQL 脚本)解释更改原因)。

您在数据库的测试副本上执行 SQL,并使用相同的结构创建另一个表来保存修改后的记录。

然后您创建并测试必要的触发器,生成一个新的 SQL 脚本来创建这两个表和您的触发器,并在您的实时数据库上执行它。您授予您的提供者使用新表的权限,然后他们就离开了。

大家都很开心。是的,这可能需要更长的时间,是的,您还有更多工作要做,但这比尝试解析查询日志以重新创建已更改的记录所需的工作少得多/删除,或解析二进制日志并随时更新每次更改,并在日志文件格式更改时修改您的代码等。

【讨论】:

    猜你喜欢
    • 2019-10-23
    • 2023-03-23
    • 2010-12-04
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-19
    相关资源
    最近更新 更多