MariaDB中是否存在包含数据库所有对象的统一表?
MariaDB中是否存在包含数据库所有对象的统一表?
很遗憾,MariaDB(和MySQL)并没有像SQL Server里sys.objects那样的单一系统表,能一次性列出数据库里所有类型的对象。不过你可以通过合并多个INFORMATION_SCHEMA下的系统视图来实现类似的效果,用UNION ALL把不同对象类型的数据整合到一起。
下面是一个实用的查询示例,能把表、视图、存储过程、函数、触发器和事件这些常见对象都汇总起来:
SELECT table_name AS object_name, table_type AS object_type, create_time AS created, update_time AS modified FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = DATABASE() -- 限定当前数据库,也可以换成具体库名 UNION ALL SELECT routine_name AS object_name, routine_type AS object_type, created, modified FROM INFORMATION_SCHEMA.ROUTINES WHERE routine_schema = DATABASE() UNION ALL SELECT trigger_name AS object_name, 'TRIGGER' AS object_type, created, modified FROM INFORMATION_SCHEMA.TRIGGERS WHERE trigger_schema = DATABASE() UNION ALL SELECT event_name AS object_name, 'EVENT' AS object_type, created, last_altered AS modified FROM INFORMATION_SCHEMA.EVENTS WHERE event_schema = DATABASE();
说明一下各个部分:
INFORMATION_SCHEMA.TABLES:包含了普通表(BASE TABLE)和视图(VIEW)INFORMATION_SCHEMA.ROUTINES:包含存储过程(PROCEDURE)和自定义函数(FUNCTION)INFORMATION_SCHEMA.TRIGGERS:存储所有触发器,这里我们手动指定类型为TRIGGERINFORMATION_SCHEMA.EVENTS:包含定时事件,类型指定为EVENT
你可以根据自己的需求调整查询:比如添加DEFINER字段查看对象所有者,或者过滤掉某些不需要的对象类型。如果要查询所有数据库,去掉WHERE table_schema = DATABASE()这类条件即可(不过要注意权限问题)。
备注:内容来源于stack exchange,提问作者Eliocarlos Costa
相关产品推荐
相关产品推荐

