有没有办法检测在MySQL中执行ALTER TABLE语句的时间?

时间:2018-04-10 02:29:11

标签: mysql alter-table database-trigger

有没有办法检测MySQL中何时执行ALTER TABLE语句?例如,如果在some_table上执行了以下语句,是否有任何方法可以检测列名称是否从column_name_a更改为column_name_b并将其记录在数据库中的另一个表中?< / p>

ALTER TABLE `some_table` 
CHANGE COLUMN `column_name_a` `column_name_b` VARCHAR(255) NULL DEFAULT NULL;

感谢。

1 个答案:

答案 0 :(得分:1)

据我所知,遗憾的是不可能在INFORMATION_SCHEMA表上放置触发器,因为它们是严格说出的视图,触发器不能用于视图。如果可以在INFORMATION SCHEMA上触发,那么您可以触发更新INFORMATION_SCHEMA.COLUMNS表以识别名称更改。

但是,您可以做的是以下之一:

选项1)维护包含所有列名称的真实表。然后创建一个函数,检查INFORMATION_SCHEMA.COLUMNS表与表之间的差异。如果有,您知道名称已更改。您需要将新名称复制到列名表中,并在更改名称时执行您想要执行的任何操作。

然后必须通过mysql调度程序定期运行检查差异的函数,以便尽快检测名称更改。请注意,这不是实时解决方案。 ÀLTER TABLE命令与其检测之间将存在延迟。如果在您的方案中这是不可接受的,您需要使用

选项2)不要直接调用ÀLTER TABLE,而是将其包装在函数中。在此功能中,您还可以调用其他功能来实现您需要实现的功能。如果用于驱动应用程序的更高编程语言来制定所需步骤可能是值得的。如果无法做到这一点,您将受限于mysql环境中函数/过程中提供的可能性。

很抱歉没有更简单的方法为你做这件事。