dict_obj_tree
資料表提供來自 dict_obj_info
資料表的表格資訊的樹狀檢視。這主要是用於測試,但對於視覺化 NDB
資料庫物件的階層結構也很有用。
dict_obj_tree
資料表包含以下欄位
type
DICT
物件的類型;連結dict_obj_types
以取得物件類型的名稱id
物件識別碼;與
dict_obj_info
中的id
欄位相同對於磁碟資料復原日誌檔案和資料檔案,這與 Information Schema
FILES
資料表的LOGFILE_GROUP_NUMBER
欄位中顯示的值相同;對於復原日誌檔案,也與 ndbinfologbuffers
和logspaces
資料表中的log_id
欄位顯示的值相同name
物件的完整名稱;與
dict_obj_info
中的fq_name
欄位相同對於表格,這是
(與其database_name
/def/table_name
parent_name
相同);對於任何類型的索引,這會採用NDB$INDEX_
的形式index_id
_CUSTOMparent_type
此物件的父物件的
DICT
物件類型;連結dict_obj_types
以取得物件類型的名稱parent_id
此物件的父物件的識別碼;與
dict_obj_info
資料表的id
欄位相同parent_name
此物件的父物件的完整名稱;與
dict_obj_info
資料表的fq_name
欄位相同對於表格,其格式為
。對於索引,其名稱為database_name
/def/table_name
sys/def/
。對於主索引鍵,其名稱為table_id
/index_name
sys/def/
,而對於唯一索引鍵,其名稱為table_id
/PRIMARYsys/def/
table_id
/uk_name
$uniqueroot_type
根物件的
DICT
物件類型;連結dict_obj_types
以取得物件類型的名稱root_id
根物件的識別碼;與
dict_obj_info
資料表的id
欄位相同root_name
根物件的完整名稱;與
dict_obj_info
資料表的fq_name
欄位相同level
物件在階層結構中的層級
path
在
NDB
物件階層結構中物件的完整路徑;物件由向右箭頭 (表示為->
) 分隔,從左側的根物件開始indented_name
name
前面加上向右箭頭 (表示為->
),前面帶有與物件在階層結構中的深度相對應的空格數
path
欄位對於在單行中取得給定 NDB
資料庫物件的完整路徑很有用,而 indented_name
欄位可用於取得所需物件的完整階層資訊的樹狀配置。
範例:假設存在一個 test
資料庫,且此資料庫中沒有名為 t1
的現有表格,請執行以下 SQL 陳述式
CREATE TABLE test.t1 (
a INT PRIMARY KEY,
b INT,
UNIQUE KEY(b)
) ENGINE = NDB;
您可以使用此處顯示的查詢來取得剛建立的表格的路徑
mysql> SELECT path FROM ndbinfo.dict_obj_tree
-> WHERE name LIKE 'test%t1';
+-------------+
| path |
+-------------+
| test/def/t1 |
+-------------+
1 row in set (0.14 sec)
您可以使用表格的路徑作為此查詢中根名稱來查看此表格的所有相依物件的路徑
mysql> SELECT path FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/t1';
+----------------------------------------------------------+
| path |
+----------------------------------------------------------+
| test/def/t1 |
| test/def/t1 -> sys/def/13/b |
| test/def/t1 -> sys/def/13/b -> NDB$INDEX_15_CUSTOM |
| test/def/t1 -> sys/def/13/b$unique |
| test/def/t1 -> sys/def/13/b$unique -> NDB$INDEX_16_UI |
| test/def/t1 -> sys/def/13/PRIMARY |
| test/def/t1 -> sys/def/13/PRIMARY -> NDB$INDEX_14_CUSTOM |
+----------------------------------------------------------+
7 rows in set (0.16 sec)
若要取得 t1
表格及其所有相依物件的階層檢視,請執行類似此處的查詢,該查詢會選取每個具有 test/def/t1
作為其根物件名稱的物件的縮排名稱
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/t1';
+----------------------------+
| indented_name |
+----------------------------+
| test/def/t1 |
| -> sys/def/13/b |
| -> NDB$INDEX_15_CUSTOM |
| -> sys/def/13/b$unique |
| -> NDB$INDEX_16_UI |
| -> sys/def/13/PRIMARY |
| -> NDB$INDEX_14_CUSTOM |
+----------------------------+
7 rows in set (0.15 sec)
當使用磁碟資料表格時,請注意在此情況下,表格空間或日誌檔案群組會被視為根物件。這表示您必須知道與給定表格相關聯的任何表格空間或日誌檔案群組的名稱,或從 SHOW CREATE TABLE
取得此資訊,然後查詢 INFORMATION_SCHEMA.FILES
,或使用此處顯示的類似方式
mysql> SHOW CREATE TABLE test.dt_1\G
*************************** 1. row ***************************
Table: dt_1
Create Table: CREATE TABLE `dt_1` (
`member_id` int unsigned NOT NULL AUTO_INCREMENT,
`last_name` varchar(50) NOT NULL,
`first_name` varchar(50) NOT NULL,
`dob` date NOT NULL,
`joined` date NOT NULL,
PRIMARY KEY (`member_id`),
KEY `last_name` (`last_name`,`first_name`)
) /*!50100 TABLESPACE `ts_1` STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> SELECT DISTINCT TABLESPACE_NAME, LOGFILE_GROUP_NAME
-> FROM INFORMATION_SCHEMA.FILES WHERE TABLESPACE_NAME='ts_1';
+-----------------+--------------------+
| TABLESPACE_NAME | LOGFILE_GROUP_NAME |
+-----------------+--------------------+
| ts_1 | lg_1 |
+-----------------+--------------------+
1 row in set (0.00 sec)
現在您可以取得表格、表格空間和日誌檔案群組的階層資訊,如下所示
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'test/def/dt_1';
+----------------------------+
| indented_name |
+----------------------------+
| test/def/dt_1 |
| -> sys/def/23/last_name |
| -> NDB$INDEX_25_CUSTOM |
| -> sys/def/23/PRIMARY |
| -> NDB$INDEX_24_CUSTOM |
+----------------------------+
5 rows in set (0.15 sec)
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name = 'ts_1';
+-----------------+
| indented_name |
+-----------------+
| ts_1 |
| -> data_1.dat |
| -> data_2.dat |
+-----------------+
3 rows in set (0.17 sec)
mysql> SELECT indented_name FROM ndbinfo.dict_obj_tree
-> WHERE root_name LIKE 'lg_1';
+-----------------+
| indented_name |
+-----------------+
| lg_1 |
| -> undo_1.log |
| -> undo_2.log |
+-----------------+
3 rows in set (0.16 sec)