【 使用环境 】测试环境
【 使用版本 】Server version: 5.7.25 OceanBase_CE 4.3.5.2 (r102000112025051418-f481a33c42054b0944ae0e9926651b550157e467) (Built May 14 2025 18:45:56)
【问题描述】向数据表 test 中插入、修改、删除表记录后, information_schema.TABLES 中的相关记录未更新。当 truncate test 表后,information_schema.TABLES 中的 UPDATE_TIME 更新为了最新时间。 预期增删改记录后 TABLES 表也应该更新,
截图上传总是失败,复现流程为:
-
创建表 test:
CREATE TABLE test
(id
int);
-
查询 select * from information_schema.TABLES where TABLE_NAME = ‘test’;
-
向 test1 表写入数据
-
查询 select * from information_schema.TABLES where TABLE_NAME = ‘test’;
结果与第 2 步的结果相同, UPDATE_TIME 时间未更新【预期应该更新】
-
truncate test1
-
查询 select * from information_schema.TABLES where TABLE_NAME = ‘test’;
此时 UPDATE_TIME 字段值被更新为最新值。
2 个赞
Giant
#5
应该就是 DDL 肯定会更新这个字段, 比如 create_time 或者 update_time 等。
mysql 测试了几个
- DDL 会更新 create_time字段
- update_time字段 一直是 NULL的 。 跟写入 data file有关系
官方解释
1 个赞
好的,谢谢。目前使用的 mariadb,应该是跟 mysql 的行为不完全一致。看官方文档对该字段的描述也不同
mariadb:
1 个赞
oceanbase 有其他类似 information_schema.TABLES.UPDATE_TIME 的表/字段来查看数据表的 最后一次增删改时间么。
或者是有其他手段来监听数据表的变更么?
淇铭
#8
DDL操作UPDATE_TIME会推高:但是drop table 如果进入回收站 回收站的被删除的表没有清理 也会推高;如果被清理了该记录会被删除; DROP TABLE table_name PURGE;不进入回收站 该记录会被删除
dml操作UPDATE_TIME不会推高
1 个赞
@Giant @淇铭
mysql 的行为取决于 information_schema_stats_expiry 变量的值,当该值为 0 的时候, INSERT 操作是会更新 UPDATE_TIME 字段的。
而根据 oceanbase 文档中的说法,该变量在 oceanbase 中并不生效。
我测试了下,在 oceanbase 中修改此变量也的确没有效果,
这是否是一个兼容性问题?
由于不允许新用户上传多个图片,我会分多次回复贴上相关截图。
1 个赞
所以目前来看 oceanbase 在这部分是没有兼容 mysql,不支持通过 information_schema.TABLES 的 UPDATE_TIME 字段来查询表最后一次数据变更时间的。
那么是否有其他手段来获取表的最后一次数据变更时间?
1 个赞
Giant
#16
目前业务应用中 不需要这个字段来判断啊
- 所有业务表中 有 update_time字段 类型为 default current_time,每次进行任何操作都能通过这个行上的时间进行判断
一般会自己增加create_time字段,代表记录的创建时间
###########################
您可以看下 oceanbase的数据字典表 ,几乎都有这两个相似的字段
1 个赞
淇铭
#17
目前ob确实是这样的 如果想捕捉到dml操作的记录时间 你可以自己写个触发器 修改的时候触发
1 个赞
查业务数据表 max(update_time) 不太合适,在要判断的表比较多的时候比较麻烦,表数据量大的话还得建索引。不如直接从 information_schema.TABLE 查询方便。
多谢解答,确认 oceanbase 不支持的话,我就找其他方式来搞了。
1 个赞