gpt4 book ai didi

MySql:知道表最后修改的日期

转载 作者:行者123 更新时间:2023-11-29 01:04:42 25 4
gpt4 key购买 nike

我在 MySql 中使用 InnoDB 引擎,我试图弄清楚是否有可能知道上次修改表的日期时间(无论是数据还是结构)。

由于它是 InnoDB,我无法在 information_schema.Tables 中使用 column update_time,因为那里没有任何记录。 information_schema 的性能无论如何都是糟糕的,所以没有太大的损失。

我考虑过使用触发器在进行修改时将日期插入自制的“元数据”表中,但 MySql 不支持 DDL 触发器(Create、Alter 和 Drop 语句),所以这不会'也不行。

我的想法有点用完了,有什么建议吗?

谢谢

编辑:我忘记指定我正在开发的 Silverlight 应用程序将检索(通过网络服务)此日期时间数据。

提供更多背景信息:我的 Web 服务上有一个方法可以返回数据库的结构及其数据。根据大小,这可能是一个相对较长的操作,因为我必须在 information_schema 表中获取外键信息。所以我只想在数据或结构发生变化时查询数据库。

最佳答案

好的,您可以通过为表创建触发器来使用审计跟踪

例子

插入recored时

CREATE TRIGGER emp_insert AFTER Insert ON hs_hr_employee FOR EACH ROW BEGIN
INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", NEW.emp_number, null, null, null,NOW(),@user,"new record added");
END;

更新标签

CREATE TRIGGER emp_update AFTER UPDATE ON hs_hr_employee FOR EACH ROW BEGIN IF NOT( OLD.emp_number <=> NEW.emp_number) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "emp_number", OLD.emp_number, NEW.emp_number,NOW(),@user,"record updated"); END IF;
IF NOT( OLD.employee_id <=> NEW.employee_id) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "employee_id", OLD.employee_id, NEW.employee_id,NOW(),@user,"record updated"); END IF;
IF NOT( OLD.emp_lastname<=> NEW.emp_lastname) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "emp_lastname", OLD.emp_lastname, NEW.emp_lastname,NOW(),@user,"record updated"); END IF;
IF NOT( OLD.emp_firstname <=> NEW.emp_firstname) THEN INSERT INTO hs_hr_audit (audit_table_name, audit_row_pk, audit_field_name, audit_old_value, audit_new_value,audit_datetime,audit_user,audit_description) VALUES ( "hs_hr_employee", OLD.emp_number, "emp_firstname", OLD.emp_firstname, NEW.emp_firstname,NOW(),@user,"record updated"); END IF;

在 google 上搜索 audit trail 以获取更多详细信息

关于MySql:知道表最后修改的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com