数据库对象之间的依赖就是描述数据库对象之间的依赖和引用关系。本文主要介绍 OceanBase 数据库 MySQL 模式下如何创建和查看数据库对象之间的依赖关系。
某些类型的 Schema 对象可以在其定义中引用其他的对象。例如,一个视图的定义可能是一个引用了表或者其他视图的查询。如果对象 A 的定义引用对象 B,则 A 是(B 的)依赖对象,B 是(A 的)引用对象。
MySQL 租户下描述了视图对视图、视图对表的依赖关系,并可以通过 information_schema 数据库的 VIEW_TABLE_USAGE 视图查询。
示例 1: 创建一个视图 view2,该视图引用了表 tbl1 和另一个视图 view1。
obclient> CREATE TABLE tbl1(col1 INT, col2 INT);
Query OK, 0 rows affected
obclient> CREATE TABLE tbl2 (col1 INT, col2 INT);
Query OK, 0 rows affected
obclient> CREATE VIEW view1 AS SELECT * FROM tbl2;
Query OK, 0 rows affected
obclient> CREATE VIEW view2 AS SELECT t.col1 AS col1, t.col2 AS col2 FROM tbl1 t, view1 v WHERE
t.col1 = v.col2;
Query OK, 0 rows affected
示例 2 :通过 information_schema 数据库的 VIEW_TABLE_USAGE 视图查询数据库对象之间的依赖关系。
obclient> SELECT * FROM information_schema.VIEW_TABLE_USAGE;
+--------------+-------------+-----------+--------------+------------+---------------+
| VIEW_CATALOG | VIEW_SCHEMA | VIEW_NAME | TABLE_SCHEMA | TABLE_NAME | TABLE_CATALOG |
+--------------+-------------+-----------+--------------+------------+---------------+
| def | test | view1 | test | tbl2 | def |
| def | test | view2 | test | view1 | def |
| def | test | view2 | test | tbl1 | def |
+--------------+-------------+-----------+--------------+------------+---------------+
3 rows in set
上述示例中,视图的查询结果中描述了数据库对象之间的依赖关系。例如,视图 view1 引用了表 tbl2,视图 view2 引用了表 tbl1 和另一个视图 view1。
视图对视图、视图对表的依赖关系在某些场景下非常有用。例如,在数据库迁移的场景下,需要在另一个数据库中重建 Schema 对象。如果需要重建的 Schema 对象是一个视图,那就必须要先重建该视图依赖的其他对象,否则重建该视图时会报错依赖的对象不存在。如果能获取到视图对视图、视图对表的依赖关系,那就可以很轻松的完成重建对象的工作。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




