有没有办法检测ALTER TABLE
语句何时在MySQL中执行?例如,如果在some_table
上执行以下语句,有没有办法检测到列名从column_name_a
更改为column_name_b
并将其记录在数据库中的另一个表中?
ALTER TABLE `some_table`
CHANGE COLUMN `column_name_a` `column_name_b` VARCHAR(255) NULL DEFAULT NULL;
谢谢。
据我所知,不幸的是,不可能在INFORMATION_SCHEMA表上放置触发器,因为它们是严格意义上的视图,并且触发器不能用于视图。如果信息架构上可以触发触发器,则可以在INFORMATION_SCHEMA更新时触发触发器。用于标识名称更改的列表。
但是,您可以执行以下操作之一:
选项 1)维护一个包含所有列名的真实表。然后创建一个函数来检查INFORMATION_SCHEMA之间的差异。列表包含您的表。如果有,您就知道名称已更改。您需要将新名称复制到列名称表中,并在名称更改时执行其他任何操作。
然后,必须通过mysql调度程序定期运行检查差异的功能,以便尽快检测名称更改。请注意,这不是实时解决方案。ÀLTER TABLE
命令与其检测之间存在滞后。如果这在您的场景中不可接受,则需要使用
选项 2)不要直接调用ÀLTER TABLE
,而是将其包装在函数中。在此函数中,您还可以调用其他函数来实现您需要实现的目标。如果值得使用用于驱动应用程序的更高编程语言制定所需的步骤。如果这是不可能的,您将被限制在mysql环境中的函数/过程中提供的可能性。
很抱歉没有更简单的方法为您执行此操作。