有什么方法可以检测 ALTER TABLE 语句何时在 MySQL 中执行?
Is there any way to detect when an ALTER TABLE statement is executed in MySQL?
有什么方法可以检测 MySQL 中的 ALTER TABLE
语句何时执行?比如下面的语句是在some_table
上执行的,有没有办法检测到列名从column_name_a
变成了column_name_b
并记录在另一个table中数据库?
ALTER TABLE `some_table`
CHANGE COLUMN `column_name_a` `column_name_b` VARCHAR(255) NULL DEFAULT NULL;
谢谢。
据我所知,不幸的是不可能在 INFORMATION_SCHEMA table 上放置触发器,因为它们是严格口述的视图,并且不能使触发器对视图起作用。如果 INFORMATION SCHEMA 上的触发器是可能的,那么您可以在更新 INFORMATION_SCHEMA.COLUMNS table 时触发以识别名称更改。
但是,您可以做以下事情之一:
选项 1) 维护一个包含所有列名的真实 table。然后创建一个函数来检查 INFORMATION_SCHEMA.COLUMNS table 和你的 table 之间的差异。如果有的话,你知道名字已经改变了。您需要将新名称复制到您的列名称 table 并在名称更改后执行您想要执行的任何其他操作。
检查差异的功能必须通过 mysql 调度程序定期 运行,以便尽快检测名称更改。请注意,这不是实时解决方案。 ÀLTER TABLE
命令与其检测之间会有延迟。如果在您的场景中这是 unacceptable,您需要使用
选项2)不要直接调用ÀLTER TABLE
,而是用一个函数包装起来。在这个函数内你还可以调用其他函数来实现你需要实现的。如果用您用来驱动应用程序的高级编程语言来制定所需的步骤可能是值得的。如果这不可能,您将被限制在 mysql 环境中的 functions/procedures 中提供的可能性。
很抱歉没有更简单的方法可以为您完成此操作。
有什么方法可以检测 MySQL 中的 ALTER TABLE
语句何时执行?比如下面的语句是在some_table
上执行的,有没有办法检测到列名从column_name_a
变成了column_name_b
并记录在另一个table中数据库?
ALTER TABLE `some_table`
CHANGE COLUMN `column_name_a` `column_name_b` VARCHAR(255) NULL DEFAULT NULL;
谢谢。
据我所知,不幸的是不可能在 INFORMATION_SCHEMA table 上放置触发器,因为它们是严格口述的视图,并且不能使触发器对视图起作用。如果 INFORMATION SCHEMA 上的触发器是可能的,那么您可以在更新 INFORMATION_SCHEMA.COLUMNS table 时触发以识别名称更改。
但是,您可以做以下事情之一:
选项 1) 维护一个包含所有列名的真实 table。然后创建一个函数来检查 INFORMATION_SCHEMA.COLUMNS table 和你的 table 之间的差异。如果有的话,你知道名字已经改变了。您需要将新名称复制到您的列名称 table 并在名称更改后执行您想要执行的任何其他操作。
检查差异的功能必须通过 mysql 调度程序定期 运行,以便尽快检测名称更改。请注意,这不是实时解决方案。 ÀLTER TABLE
命令与其检测之间会有延迟。如果在您的场景中这是 unacceptable,您需要使用
选项2)不要直接调用ÀLTER TABLE
,而是用一个函数包装起来。在这个函数内你还可以调用其他函数来实现你需要实现的。如果用您用来驱动应用程序的高级编程语言来制定所需的步骤可能是值得的。如果这不可能,您将被限制在 mysql 环境中的 functions/procedures 中提供的可能性。
很抱歉没有更简单的方法可以为您完成此操作。