文件首頁
MySQL NDB Cluster API 開發者指南
相關文件 下載本手冊
PDF (美式信紙) - 3.6Mb
PDF (A4) - 3.6Mb


2.3.3 Dictionary 類別

本節提供有關 Dictionary 類別的資訊。

Dictionary 類別概述

父類別

NdbDictionary

子類別

List

描述

這用於定義和擷取資料物件中繼資料。它也包含用於建立和捨棄資料庫物件的方法。

方法

下表列出此類別的公用方法,以及每個方法的用途或用法

表 2.12 Dictionary 類別方法和描述

名稱 描述
Dictionary() 類別建構函式方法
~Dictionary() 解構函式方法
beginSchemaTrans() 開始結構描述交易
createDatafile() 建立資料檔案
createEvent() 建立事件
createForeignKey() 建立外部索引鍵
createHashMap() 建立雜湊對應
createIndex() 建立索引
createLogfileGroup() 建立記錄檔案群組
createRecord() 建立 Ndbrecord 物件
createTable() 建立資料表
createTablespace() 建立表格空間
createUndofile() 建立復原檔案
dropDatafile() 捨棄資料檔案
dropEvent() 捨棄事件
dropForeignKey() 捨棄外部索引鍵
dropIndex() 捨棄索引
dropLogfileGroup() 捨棄記錄檔案群組
dropTable() 捨棄資料表
dropTablespace() 捨棄表格空間
dropUndofile() 捨棄復原檔案
endSchemaTrans() 結束 (認可並關閉) 結構描述交易
getDatafile() 取得具有指定名稱的資料檔案
getDefaultHashMap() 取得資料表的預設雜湊對應
getEvent() 取得具有指定名稱的事件
getForeignKey() 取得具有指定名稱或參照的外部索引鍵
getHashMap() 取得具有指定名稱或關聯資料表的雜湊對應
getIndex() 取得具有指定名稱的索引
getLogfileGroup() 取得具有指定名稱的記錄檔案群組
getNdbError() 擷取最新的錯誤
getTable() 取得具有指定名稱的資料表
getTablespace() 取得具有指定名稱的表格空間
getUndofile() 取得具有指定名稱的復原檔案
hasSchemaTrans() 告知目前是否存在結構描述交易
initDefaultHashMap() 初始化資料表的預設雜湊對應
invalidateTable() 使資料表物件失效
listObjects() 擷取字典中的物件清單
listIndexes() 擷取在指定資料表上定義的索引清單
listEvents() 擷取字典中定義的事件清單
prepareHashMap() 建立或擷取可更新的雜湊對應
releaseEvent() 刪除先前由 getEvent() 傳回的事件
removeCachedTable() 從本機快取中移除資料表
removeCachedIndex() 從本機快取中移除索引

使用 Dictionary::create*() 方法建立的資料庫物件 (例如資料表和索引) 無法由 MySQL Server 看見。這表示 MySQL 用戶端無法存取它們,並且它們無法被複寫。基於這些原因,通常最好避免使用它們。

Dictionary 類別沒有任何直接使用資料行的方法。您必須使用 Column 類別方法來執行此目的—如需詳細資訊,請參閱 第 2.3.1 節「Column 類別」

類型

請參閱第 2.3.10 節「List 類別」第 2.3.4 節「Element 結構」

Dictionary 類別建構函式

描述

此方法會建立 Dictionary 類別的新執行個體。

此類別的建構函式和解構函式都是受保護的方法,而非公用方法。

簽章
protected Dictionary
    (
      Ndb& ndb
    )
參數

Ndb 物件。

回傳值

一個 Dictionary 物件。

解構子

解構子不接受任何參數,且不回傳任何值。

protected ~Dictionary
    (
      void
    )

Dictionary::beginSchemaTrans()

描述

開始一個結構描述交易。如果交易已經啟動,或是核心元資料被鎖定,則會發生錯誤。您可以使用 hasSchemaTrans() 方法來判斷結構描述交易是否已經存在。

每當建立、變更或刪除資料物件時,都會發生元資料操作;此類操作可以在 NDB 核心中建立額外的子操作。

Ndb 物件及其相關的 Dictionary 一次支援一個結構描述交易。預設情況下,每個元資料操作都會單獨執行;也就是說,對於每個操作,都會隱式啟動一個結構描述交易,執行操作(包括任何子操作),然後關閉交易。

也可以顯式啟動和結束結構描述交易,並在其邊界內原子地執行一組使用者定義的操作。在這種情況下,結構描述交易中的所有操作要么成功,要么中止並回滾,作為一個單元。這可以透過遵循此處列出的步驟來完成。

  1. 若要開始結構描述交易,請呼叫 beginSchemaTrans()

  2. 執行所需的操作(例如 createTable())。

  3. 透過呼叫 endSchemaTrans 來結束結構描述交易。

每個操作都會傳送到 NDB 核心,後者會剖析並儲存它。剖析失敗會導致在傳回之前回滾到先前的使用者操作,此時使用者可以繼續或中止整個交易。

提交所有操作後,endSchemaTrans() 會處理並提交它們。如果發生錯誤,交易會立即中止。

如果使用者在呼叫 endSchemaTrans() 之前退出,NDB 核心會中止交易。如果使用者在呼叫 endSchemaTrans() 傳回之前退出,則核心會繼續處理請求,並且其完成狀態會回報在叢集記錄中。

簽章
int beginSchemaTrans
    (
      void
    )
參數

無。.

回傳值

成功時傳回 0,錯誤時傳回 -1。

Dictionary::createDatafile()

描述

此方法會建立新的資料檔案,並指定一個 Datafile 物件。

簽章
int createDatafile
    (
      const Datafile& dFile
    )
參數

需要一個引數,即對 Datafile 執行個體的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::createEvent()

描述

建立一個事件,並指定一個對 Event 物件的參考。

您應該記住,NDB API 不會追蹤已配置的事件物件,這表示使用者必須在使用 createEvent() 取得的 Event 物件不再需要時將其刪除。

簽章
int createEvent
    (
      const Event& event
    )
參數

Event 物件的參考 event

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::createForeignKey()

描述

建立一個 ForeignKey 物件,並指定對此物件和 Object ID 的參考。

簽章
int createForeignKey
    (
      const ForeignKey&,
      ObjectId* = 0,
      int flags = 0
    )
參數

ForeignKey 物件的參考,以及一個 Object ID。如果使用選用的值 flags,則允許建立外鍵而不執行任何外鍵檢查。如果設定,其值必須是 CreateFK_NoVerify (1)。

回傳值

成功時傳回 0

Dictionary::createHashMap()

描述

建立一個 HashMap

簽章
int createHashMap
    (
      const HashMap& hashmap,
      ObjectId* id = 0
    )
參數

對雜湊對應的參考,以及選擇性地要指派給它的 ID。

回傳值

成功時傳回 0;失敗時傳回 -1 並設定錯誤。

Dictionary::createIndex()

描述

此方法會建立索引,並指定 Index 的執行個體,以及可能還有選用的 Table 執行個體。

簽章

可以使用或不使用表格物件的參考來呼叫此方法。

int createIndex
    (
      const Index& index
    )
int createIndex
    (
      const Index& index,
      const Table& table
    )
參數

必要:對 Index 物件的參考。選用:對 Table 物件的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::createLogfileGroup()

描述

此方法會建立新的記錄檔群組,並指定 LogfileGroup 的執行個體。

簽章
int createLogfileGroup
    (
      const LogfileGroup& lGroup
    )
參數

需要一個引數,即對 LogfileGroup 物件的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::createRecord()

描述

此方法用於建立 NdbRecord 物件,以用於表格或索引掃描操作。

簽章

此方法的簽章取決於產生的 NdbRecord 是要用於表格操作還是索引操作。

若要建立用於表格操作的 NdbRecord,請使用以下內容。

NdbRecord* createRecord
    (
      const Table* table,
      const RecordSpecification* recSpec,
      Uint32 length,
      Uint32 elSize
    )

若要建立用於索引操作的 NdbRecord,您可以使用以下其中一種。

NdbRecord* createRecord
    (
      const Index* index,
      const Table* table,
      const RecordSpecification* recSpec,
      Uint32 length,
      Uint32 elSize
    )

NdbRecord* createRecord
    (
      const Index* index,
      const RecordSpecification* recSpec,
      Uint32 length,
      Uint32 elSize
    )
參數

Dictionary::createRecord() 採用下列參數。

回傳值

用於涉及給定表格或索引之操作的 NdbRecord

範例

請參閱第 2.3.22 節,「NdbRecord 介面」

Dictionary::createTable()

描述

建立一個表格,並指定 Table 的執行個體。

使用此方法建立的表格無法被 MySQL 伺服器看到、無法被 MySQL 用戶端更新,且無法被複寫。

簽章
int createTable
    (
      const Table& table
    )
參數

Table 的執行個體。如需詳細資訊,請參閱第 2.3.27 節,「表格類別」

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::createTablespace()

描述

此方法會建立新的表格空間,並指定 Tablespace 物件。

簽章
int createTablespace
    (
      const Tablespace& tSpace
    )
參數

此方法需要一個引數,即對 Tablespace 執行個體的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::createUndofile()

描述

此方法會建立新的復原檔案,並指定 Undofile 物件。

簽章
int createUndofile
    (
      const Undofile& uFile
    )
參數

此方法需要一個引數:對 Undofile 執行個體的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::dropDatafile()

描述

此方法會刪除資料檔案,並指定 Datafile 物件。

簽章
int dropDatafile
    (
      const Datafile& dFile
    )
參數

需要一個引數,即對 Datafile 執行個體的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::dropEvent()

描述

此方法會刪除事件,並指定對 Event 物件的參考。

簽章
int dropEvent
    (
      const char* name,
      int         force = 0
    )
參數

此方法採用兩個參數。

  • 要刪除的事件的 name,以字串表示。

  • 預設情況下,如果指定的事件不存在,dropEvent() 會失敗。您可以傳遞任何非零值給(選用的)force 引數來覆寫此行為;在這種情況下,不會檢查是否真的有此類事件,並且只有在事件存在但因故無法刪除時才會傳回錯誤。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::dropForeignKey()

描述

此方法會刪除外鍵,並指定要刪除的 ForeignKey 物件的參考。

簽章
int dropForeignKey
    (
      const ForeignKey&
    )
參數

要刪除之 ForeignKey 的參考。

回傳值

成功時傳回 0

Dictionary::dropIndex()

描述

此方法會刪除索引,並指定 Index 的執行個體,以及可能還有選用的 Table 執行個體。

簽章
int dropIndex
    (
      const Index& index
    )
int dropIndex
    (
      const Index& index,
      const Table& table
    )
參數

此方法採用兩個參數,其中一個是選用的。

  • 必要:對 Index 物件的參考。

  • :對 Table 物件的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::dropLogfileGroup()

描述

指定 LogfileGroup 的執行個體,此方法會刪除對應的記錄檔群組。

簽章
int dropLogfileGroup
    (
      const LogfileGroup& lGroup
    )
參數

需要一個引數,即對 LogfileGroup 物件的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::dropTable()

描述

刪除表格,並指定 Table 的執行個體。

此方法會刪除正在刪除的 table 上的所有外鍵約束,無論被刪除的表格是做為父表格、子表格還是兩者。

在 NDB 8.0 之前,使用此方法刪除的 NDB 表格會保留在 MySQL 資料字典中,但無法在 mysql 用戶端中使用 DROP TABLE 來刪除。在 NDB 8.0 中,可以使用 DROP TABLE 來刪除這類孤立表格。(錯誤 #29125206,錯誤 #93672)

簽章
int dropTable
    (
      const Table& table
    )
參數

Table 的執行個體。如需詳細資訊,請參閱第 2.3.27 節,「表格類別」

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::dropTablespace()

描述

此方法會刪除表格空間,並指定 Tablespace 物件。

簽章
int dropTablespace
    (
      const Tablespace& tSpace
    )
參數

此方法需要一個引數,即對 Tablespace 執行個體的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::dropUndofile()

描述

此方法會刪除復原檔案,並指定 Undofile 物件。

簽章
int dropUndofile
    (
      const Undofile& uFile
    )
參數

此方法需要一個引數:對 Undofile 執行個體的參考。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::endSchemaTrans()

描述

結束以 beginSchemaTrans() 開始的綱要交易;會導致操作被處理,並提交 (commit) 或中止 (abort) 並回滾 (roll back)。此方法結合了交易執行和關閉;不需要(或未實作)針對這些任務的個別方法。即使目前沒有作用中的綱要交易,也可以成功呼叫此方法。

如同許多其他 NDB API 方法,endSchemaTrans() 完全有可能覆寫任何目前的錯誤碼。因此,您應該先檢查並儲存先前失敗操作可能產生的任何錯誤碼。

簽章
int endSchemaTrans
    (
      Uint32 flags = 0
    )
參數

flags 決定如何處理已完成的交易。預設值為 0,會導致交易被提交。

Dictionary::SchemaTransFlag.  您也可以將此處顯示的任一 SchemaTransFlag 值與 endSchemaTrans() 搭配使用

  • SchemaTransAbort (= 1):導致交易被中止

  • SchemaTransBackground (= 2):導致交易在背景執行;結果會寫入叢集日誌,而應用程式會繼續執行,不會等待回應。

回傳值

成功時傳回 0;發生錯誤時,傳回 -1 並設定 NdbError 錯誤碼。

Dictionary::getDatafile()

描述

此方法用於擷取 Datafile 物件,並提供資料檔案所在的資料節點的節點 ID 以及該節點檔案系統上的資料檔案路徑。

簽章
Datafile getDatafile
    (
      Uint32      nodeId,
      const char* path
    )
參數

此方法必須使用兩個引數呼叫,如下所示

  • 資料檔案所在的資料節點的 32 位元不帶正負號整數 nodeId

  • 節點檔案系統上資料檔案的 path(字串,以字元指標表示)

回傳值

Datafile 物件 - 詳細資訊請參閱 第 2.3.2 節「資料檔案類別」

Dictionary::getDefaultHashMap()

描述

取得表格的預設雜湊映射。

簽章
int getDefaultHashMap
    (
      HashMap& dst,
      Uint32 fragments
    )

int getDefaultHashMap
    (
      HashMap& dst,
      Uint32 buckets,
      Uint32 fragments
    )
回傳值

成功時傳回 0;失敗時傳回 -1 並設定錯誤。

Dictionary::getEvent()

描述

此方法用於取得新的 Event 物件,表示事件,並提供事件的名稱。

每次成功呼叫 getEvent() 都會配置記憶體。您應謹記,使用相同事件名稱連續呼叫此方法會傳回多個不同的物件。

NDB API 不會追蹤配置的事件物件,這表示使用者必須在使用完物件後,使用 delete 清理每個使用 getEvent() 建立的 Event。從 NDB 8.0.30 開始,您可以使用 releaseEvent() 來取代此操作。

簽章
const Event* getEvent
    (
      const char* eventName
    )
參數

eventName,字串(字元指標)。

回傳值

指向 Event 物件的指標。詳細資訊請參閱 第 2.3.5 節「事件類別」

Dictionary::getForeignKey()

描述

此方法用於取得新的 ForeignKey 物件,表示事件,並提供外部索引鍵的參考及其名稱。

簽章
int getForeignKey
    (
      ForeignKey& dst,
      const char* name
    )
參數

外部索引鍵及其 name 的參考,字串(字元指標)。

回傳值

指向 ForeignKey 物件的指標。

Dictionary::getHashMap()

描述

依名稱或表格取得雜湊映射。

簽名
int getHashMap
    (
      HashMap& dst,
      const char* name
    )

int getHashMap
    (
      HashMap& dst,
      const Table* table
    )
參數

雜湊映射的參考以及名稱或 Table

回傳值

成功時傳回 0;失敗時傳回 -1 並設定錯誤。

Dictionary::getIndex()

描述

此方法會擷取指向索引的指標,並提供索引名稱和索引所屬表格的名稱。

簽章
const Index* getIndex
    (
      const char* iName,
      const char* tName
    ) const
參數

需要兩個參數

  • 索引的名稱 (iName)

  • 索引所屬表格的名稱 (tName)

這兩個都是字串值,以字元指標表示。

回傳值

指向 Index 的指標。如需關於此物件的資訊,請參閱 第 2.3.8 節「索引類別」

Dictionary::getLogfileGroup()

描述

此方法會取得 LogfileGroup 物件,並提供記錄檔群組的名稱。

簽章
LogfileGroup getLogfileGroup
    (
      const char* name
    )
參數

記錄檔群組的 name

回傳值

LogfileGroup 的執行個體;如需詳細資訊,請參閱 第 2.3.9 節「記錄檔群組類別」

Dictionary::getNdbError()

描述

此方法會擷取最近的 NDB API 錯誤。

簽章
const struct NdbError& getNdbError
    (
      void
    ) const
參數

無。.

回傳值

指向 NdbError 物件的參考。

Dictionary::getTable()

描述

此方法可用於存取名稱已知的 Table

簽章
const Table* getTable
    (
      const char* name
    ) const
參數

表格的 name

回傳值

指向表格的指標,如果沒有提供 name 的表格,則為 NULL

Dictionary::getTablespace()

描述

提供表格空間的名稱或 ID 後,此方法會傳回對應的 Tablespace 物件。

簽名

此方法可以使用下列兩種方式的其中一種呼叫

  • 使用表格空間名稱

    Tablespace getTablespace
        (
          const char* name
        )
  • 使用表格空間 ID

    Tablespace getTablespace
        (
          Uint32 id
        )
參數

下列其中一項

  • 表格空間的 name,字串(以字元指標表示)

  • 表格空間的不帶正負號 32 位元整數 id

回傳值

Tablespace 物件,如 第 2.3.28 節「表格空間類別」所述。

Dictionary::getUndofile()

描述

此方法會取得 Undofile 物件,並提供還原檔所在的節點 ID 以及檔案的檔案系統路徑。

簽章
Undofile getUndofile
    (
      Uint32      nodeId,
      const char* path
    )
參數

此方法需要下列兩個引數

  • 還原檔所在的資料節點的 nodeId;此值會以 32 位元不帶正負號整數傳遞

  • 節點檔案系統上還原檔的 path(字串,以字元指標表示)

回傳值

Undofile 的執行個體。如需詳細資訊,請參閱 第 2.3.29 節「還原檔類別」

Dictionary::hasSchemaTrans()

描述

告知是否有正在進行的 NDB API 綱要交易。

簽章
bool hasSchemaTrans
    (
      void
    ) const
參數

無。.

回傳值

如果綱要交易正在進行,則傳回布林值 TRUE,否則傳回 FALSE

Dictionary::initDefaultHashMap()

描述

初始化表格的預設雜湊映射。

簽章
int initDefaultHashMap
    (
      HashMap& dst,
      Uint32 fragments
    )

int initDefaultHashMap
    (
      HashMap& dst,
      Uint32 buckets,
      Uint32 fragments
    )
參數

雜湊映射的參考和片段數。選擇性地提供儲存桶數。

回傳值

成功時傳回 0;失敗時傳回 -1 並設定錯誤。

Dictionary::invalidateIndex()

描述

此方法用於使快取索引物件失效。

簽章

此方法使失效的索引可以作為 Index 物件(使用指標)或依索引名稱和表格名稱參照,如下所示

void invalidateIndex
    (
      const char* indexName,
      const char* tableName
    )

void invalidateIndex
    (
      const Index* index
    )
參數

要從快取中移除的索引及其所屬的表格的名稱(分別為 indexNametableName),或指向對應 Index 物件的指標。

回傳值

無。.

DIctionary::invalidateTable()

描述

此方法用於使快取表格物件失效。

簽章
void invalidateTable
    (
      const char* name
    )

也可以使用 Table 物件而非表格的名稱,如下所示

void invalidateTable
    (
      const Table* table
    )
參數

要從表格快取中移除的表格的 name,或指向對應 Table 物件的指標。

回傳值

無。.

Dictionary::listEvents()

描述

此方法會傳回字典中定義的所有事件清單。

簽章
int listEvents
    (
      List& list
    )
參數

指向空 List 的參考。在 NDB 8.0.29 及更新版本中,使用 clear() 清空先前使用的 List 以重複使用。

回傳值

成功時傳回 0;失敗時傳回 -1

Dictionary::listIndexes()

描述

此方法用於取得表格上所有索引的 List,並提供表格的名稱。

簽章
int listIndexes
    (
      List&      list,
      const char* table
) const
參數

listIndexes() 採用兩個引數,兩個引數都是必要項

  • 一個指向空的 List 的參考,在呼叫此方法後,此 List 會包含索引。在 NDB 8.0.29 及更新版本中,使用 clear() 清空先前使用過的 List 以便重複使用。

  • 要列出索引的 table 名稱

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::listObjects()

描述

此方法用於取得字典中的物件列表。可以取得字典中的所有物件,或者將列表限制為單一類型的物件。

簽章

此方法有兩種簽名

int listObjects
    (
      List&        list,
      Object::Type type = Object::TypeUndefined
    ) const

int listObjects
    (
      List&        list,
      Object::Type type,
      bool         fullyQualified
    ) const
參數

需要一個指向空的 List 物件的參考—這是呼叫 listObjects() 後包含字典物件的列表。(請參閱 第 2.3.10 節,「List 類別」。) 可選的第二個參數 type 可用於將列表限制為僅限於給定類型的物件,也就是指定的 Object::Type。如果未給定 type,則列表會包含字典中的所有物件。

您也可以指定 list 中的物件名稱是否為完整限定名稱(也就是物件名稱是否包含資料庫、結構描述,以及可能包含的表格名稱)。如果您指定 fullyQualified,則也必須指定 type

在 NDB 8.0.29 及更新版本中,您可以呼叫 clear() 清空先前使用過的 List 以便重複使用。

注意

fullyQualified 設定為 false 會導致 listObjects() 傳回使用完整限定名稱的物件。

回傳值

成功時傳回 0,失敗時傳回 -1

Dictionary::prepareHashMap()

描述

建立或檢索適合修改的雜湊映射。需要進行結構描述交易;請參閱 Dictionary::beginSchemaTrans() 以取得更多資訊。

簽名

以下任何一種

  • int prepareHashMap
        (
          const Table& oldTable,
          Table& newTable
        )
  • int prepareHashMap
        (
          const Table& oldTable,
          Table& newTable,
          Uint32 buckets
        )
參數

指向舊表格和新表格的參考。可選地,可指定 bucket 的數量。

回傳值

成功時傳回 0;失敗時傳回 -1 並設定錯誤。

Dictionary::releaseEvent()

描述

此方法用於在不再需要 Event 後將其釋放。通常這是由 getEvent() 傳回的事件。

簽章
void releaseEvent
    (
      const Event* event
    )
參數

要清除的 Event

回傳值

無。.

此方法是在 NDB 8.0.30 中新增的。

Dictionary::releaseRecord()

描述

此方法用於在不再需要 NdbRecord 後將其釋放。

簽章
void releaseRecord
    (
      NdbRecord* record
    )
參數

要清除的 NdbRecord

回傳值

無。.

範例

請參閱第 2.3.22 節,「NdbRecord 介面」

Dictionary::removeCachedTable()

描述

此方法會從本機快取中移除依名稱指定的表格。

簽章
void removeCachedTable
    (
      const char* table
    )
參數

要從快取中移除的 table 名稱。

回傳值

無。.

Dictionary::removeCachedIndex()

描述

此方法會從本機快取中移除指定的索引,並給定索引的名稱以及其所在的表格名稱。

簽章
void removeCachedIndex
    (
      const char* index,
      const char* table
    )
參數

removeCachedIndex() 方法需要兩個引數

  • 要從快取中移除的 index 名稱

  • 找到索引的 table 名稱

回傳值

無。.