有没有办法检测到 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;
谢谢。
有没有办法检测到 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;
谢谢。
1条答案
按热度按时间vpfxa7rd1#
据我所知,不幸的是不可能在informationschema表上放置触发器,因为它们是严格意义上的视图,触发器不能用于视图。如果可以在信息模式上使用触发器,那么可以在更新information\u schema.columns表时使用触发器来标识名称更改。
但是,您可以执行以下操作之一:
选项1)维护一个包含所有列名的实表。然后创建一个函数,检查information\u schema.columns表和您的表之间是否存在差异。如果有,你就知道名字变了。您需要将新名称复制到列名表中,并在名称更改时执行任何其他操作。
然后,必须通过mysql调度程序定期运行检查差异的函数,以便尽快检测名称更改。请注意,这不是一个实时解决方案。两者之间会有一个延迟
ÀLTER TABLE
命令及其检测。如果这在你的场景中是不可接受的,你需要继续选项2)不呼叫
ÀLTER TABLE
直接,但将其 Package 在函数中。在这个函数中,您还可以调用其他函数来实现您需要实现的功能。if可能值得用更高级的编程语言来制定所需的步骤,以驱动应用程序。如果这是不可能的,您将被限制在mysql环境中的函数/过程中提供的可能性。很抱歉,没有一个更简单的方法为您做这件事。