本节提供了有关 Dictionary
类的信息。
- 父类
- 子类
- 描述
用于定义和检索数据对象元数据。它还包括用于创建和删除数据库对象的方法。
- 方法
-
下表列出了此类的公共方法以及每个方法的目的或用途
表 2.12 字典类方法和描述
使用
Dictionary::create
方法创建的数据库对象(如表和索引)无法被 MySQL 服务器看到。这意味着无法通过 MySQL 客户端访问它们,也无法复制它们。因此,通常最好避免使用它们。*
()Dictionary
类没有直接使用列的方法。您必须使用Column
类方法来执行此操作——有关详细信息,请参见 第 2.3.1 节,“列类”。 - 类型
- 描述
-
此方法创建一个新的
Dictionary
类实例。此类的构造函数和析构函数都是受保护的方法,而不是公共方法。
- 签名
protected Dictionary ( Ndb& ndb )
- 参数
一个
Ndb
对象。- 返回值
一个
Dictionary
对象。- 析构函数
-
析构函数不接受任何参数,也不返回任何内容
protected ~Dictionary ( void )
- 描述
-
启动一个模式事务。如果事务已经处于活动状态或内核元数据已锁定,则会发生错误。您可以使用
hasSchemaTrans()
方法来确定模式事务是否已经存在。每当创建、更改或删除数据对象时,都会发生 元数据操作;此类操作可以在 NDB 内核中创建其他子操作。
Ndb
对象及其关联的Dictionary
一次只支持一个模式事务。默认情况下,每个元数据操作都是单独执行的;也就是说,对于每个操作,都会隐式地启动一个模式事务,执行操作(包括任何子操作),然后关闭事务。还可以显式地开始和结束一个模式事务,并在其边界内原子地执行一组用户定义的操作。在这种情况下,模式事务内的所有操作要么成功,要么作为整体被中止并回滚。这是通过按照此处列出的步骤完成的
要开始模式事务,请调用
beginSchemaTrans()
。执行所需的操作(例如
createTable()
)。通过调用
endSchemaTrans
来结束模式事务。
每个操作都会发送到 NDB 内核,内核会解析并保存它。解析失败会导致回滚到上一个用户操作,然后返回,此时用户可以继续执行或中止整个事务。
提交所有操作后,
endSchemaTrans()
会处理并提交它们。如果出现错误,则会立即中止事务。如果用户在调用
endSchemaTrans()
之前退出,则 NDB 内核会中止事务。如果用户在调用endSchemaTrans()
返回之前退出,则内核会继续处理请求,并在集群日志中报告其完成状态。 - 签名
int beginSchemaTrans ( void )
- 参数
无.
- 返回值
成功返回 0,失败返回 -1。
- 描述
根据对该对象和
Object
ID 的引用,创建一个ForeignKey
对象。- 签名
int createForeignKey ( const ForeignKey&, ObjectId* = 0, int flags = 0 )
- 参数
对
ForeignKey
对象的引用,以及Object
ID。如果使用可选值flags
,则允许在不执行任何外键检查的情况下创建外键。如果设置,其值必须为CreateFK_NoVerify
(1)。- 返回值
成功返回
0
。
- 描述
创建一个
HashMap
。- 签名
int createHashMap ( const HashMap& hashmap, ObjectId* id = 0 )
- 参数
对哈希映射的引用,以及可选地要分配给它的 ID。
- 返回值
成功返回 0;失败返回 -1 并设置错误。
- 描述
此方法根据
LogfileGroup
实例创建一个新的日志文件组。- 签名
int createLogfileGroup ( const LogfileGroup& lGroup )
- 参数
需要一个参数 - 对
LogfileGroup
对象的引用。- 返回值
成功返回
0
,失败返回-1
。
- 描述
此方法用于创建
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
要与索引一起使用,则指向相应的Index
对象的指针。如果NdbRecord
要与表一起使用,则省略此参数。(参见 第 2.3.8 节,“The Index Class”。)指向
Table
对象的指针,该对象表示要扫描的表。如果生成的Ndbrecord
要与索引一起使用,则可以选择性地指定包含该索引的表。(参见 第 2.3.27 节,“The Table Class”。)用于描述列的
RecordSpecification
。记录的
length
。构成此记录的元素的大小。
- 返回值
用于涉及给定表或索引的操作的
NdbRecord
。- 示例
- 描述
-
根据
Table
实例创建一个表。使用此方法创建的表无法被 MySQL 服务器看到,无法被 MySQL 客户端更新,也无法被复制。
- 签名
int createTable ( const Table& table )
- 参数
Table
实例。有关更多信息,请参见 第 2.3.27 节,“The Table Class”。- 返回值
成功返回
0
,失败返回-1
。
- 描述
此方法根据
Tablespace
对象创建一个新的表空间。- 签名
int createTablespace ( const Tablespace& tSpace )
- 参数
此方法需要一个参数 - 对
Tablespace
实例的引用。- 返回值
成功返回
0
,失败返回-1
。
- 描述
此方法根据对
Event
对象的引用删除事件。- 签名
int dropEvent ( const char* name, int force = 0 )
- 参数
-
此方法采用两个参数
要删除的事件的
name
(以字符串形式表示)。默认情况下,如果指定的事件不存在,则
dropEvent()
会失败。可以通过传递(可选)force
参数的任何非零值来覆盖此行为;在这种情况下,不会检查是否存在此事件,并且只有在事件存在但由于某种原因无法删除它时才会返回错误。
- 返回值
成功返回
0
,失败返回-1
。
- 描述
此方法根据对要删除的
ForeignKey
对象的引用删除外键。- 签名
int dropForeignKey ( const ForeignKey& )
- 参数
对要删除的
ForeignKey
的引用。- 返回值
成功返回
0
。
- 描述
根据
LogfileGroup
实例,此方法删除相应的日志文件组。- 签名
int dropLogfileGroup ( const LogfileGroup& lGroup )
- 参数
需要一个参数 - 对
LogfileGroup
对象的引用。- 返回值
成功返回
0
,失败返回-1
。
- 描述
-
根据
Table
实例删除表。此方法会删除要删除的
table
上的所有外键约束,无论被删除的表充当父表、子表还是两者。在 NDB 8.0 之前,使用此方法删除的
NDB
表会保留在 MySQL 数据字典中,但无法使用DROP TABLE
在 mysql 客户端中删除。在 NDB 8.0 中,可以使用DROP TABLE
删除此类 “孤立” 表。(错误 #29125206,错误 #93672) - 签名
int dropTable ( const Table& table )
- 参数
Table
实例。有关更多信息,请参见 第 2.3.27 节,“The Table Class”。- 返回值
成功返回
0
,失败返回-1
。
- 描述
此方法根据
Tablespace
对象删除表空间。- 签名
int dropTablespace ( const Tablespace& tSpace )
- 参数
此方法需要一个参数 - 对
Tablespace
实例的引用。- 返回值
成功返回
0
,失败返回-1
。
- 描述
-
结束使用
beginSchemaTrans()
开始的模式事务;导致操作被处理并要么提交,要么中止并回滚。此方法结合了事务执行和关闭;不需要(或实现)用于这些任务的单独方法。即使当前没有活动模式事务,此方法也可以成功调用。与许多其他 NDB API 方法一样,
endSchemaTrans()
完全有可能覆盖任何当前错误代码。因此,应首先检查并保存可能因之前失败的操作而导致的任何错误代码。 - 签名
int endSchemaTrans ( Uint32 flags = 0 )
- 参数
-
标志决定如何处理已完成的事务。默认值为 0,这会导致事务提交。
Dictionary::SchemaTransFlag. 还可以使用这里显示的
SchemaTransFlag
值之一与endSchemaTrans()
一起使用SchemaTransAbort
(= 1):导致事务中止SchemaTransBackground
(= 2):导致事务在后台执行;结果将写入集群日志,而应用程序继续执行,不会等待响应。
- 返回值
成功返回 0;如果出现错误,则返回 -1 并设置
NdbError
错误代码。
- 描述
此方法用于检索
Datafile
对象,该对象位于数据文件所在数据节点的节点 ID 和该节点文件系统上的数据文件路径。- 签名
Datafile getDatafile ( Uint32 nodeId, const char* path )
- 参数
-
此方法必须使用两个参数调用,如下所示
数据文件所在数据节点的 32 位无符号整数
nodeId
节点文件系统上数据文件的
path
(字符串作为字符指针)
- 返回值
一个
Datafile
对象——有关详细信息,请参见 第 2.3.2 节,“Datafile 类”。
- 描述
获取表的默认哈希映射。
- 签名
-
int getDefaultHashMap ( HashMap& dst, Uint32 fragments )
或
int getDefaultHashMap ( HashMap& dst, Uint32 buckets, Uint32 fragments )
- 返回值
成功返回 0;失败返回 -1 并设置错误。
- 描述
-
此方法用于获取一个新的
Event
对象,该对象表示一个事件,并提供事件的名称。getEvent()
在每次成功调用时都会分配内存。请记住,使用相同事件名称对该方法进行连续调用会返回多个不同的对象。NDB API 不会跟踪已分配的事件对象,这意味着用户必须使用
delete
清理使用getEvent()
创建的每个Event
,在不再需要该对象之后。从 NDB 8.0.30 开始,您可以使用releaseEvent()
来完成此操作。 - 签名
const Event* getEvent ( const char* eventName )
- 参数
eventName
,一个字符串(字符指针)。- 返回值
指向
Event
对象的指针。有关更多信息,请参见 第 2.3.5 节,“事件类”。
- 描述
此方法用于获取一个新的
ForeignKey
对象,该对象表示一个事件,并提供对外部键的引用及其名称。- 签名
int getForeignKey ( ForeignKey& dst, const char* name )
- 参数
对外部键的引用及其
name
,一个字符串(字符指针)。- 返回值
指向
ForeignKey
对象的指针。
- 描述
按名称或按表获取哈希映射。
- 签名
-
int getHashMap ( HashMap& dst, const char* name )
或
int getHashMap ( HashMap& dst, const Table* table )
- 参数
对哈希映射的引用,以及名称或
Table
。- 返回值
成功返回 0;失败返回 -1 并设置错误。
- 描述
此方法检索指向索引的指针,并提供索引的名称和索引所属表的名称。
- 签名
const Index* getIndex ( const char* iName, const char* tName ) const
- 参数
-
需要两个参数
索引的名称 (
iName
)索引所属表的名称 (
tName
)
这两个都是字符串值,由字符指针表示。
- 返回值
指向
Index
的指针。有关此对象的信息,请参见 第 2.3.8 节,“索引类”。
- 描述
此方法获取一个
LogfileGroup
对象,并提供日志文件组的名称。- 签名
LogfileGroup getLogfileGroup ( const char* name )
- 参数
日志文件组的
name
。- 返回值
LogfileGroup
的实例;有关更多信息,请参见 第 2.3.9 节,“日志文件组类”。
- 描述
此方法可用于访问已知名称的
Table
。- 签名
const Table* getTable ( const char* name ) const
- 参数
表的
name
。- 返回值
指向表的指针,如果不存在具有提供的
name
的表,则为NULL
。
- 描述
此方法在提供表空间的名称或 ID 时,返回相应的
Tablespace
对象。- 签名
-
此方法可以使用以下两种方式调用
-
使用表空间名称
Tablespace getTablespace ( const char* name )
-
使用表空间 ID
Tablespace getTablespace ( Uint32 id )
-
- 参数
-
以下任一项
表空间的
name
,一个字符串(作为字符指针)表空间的 32 位无符号整数
id
- 返回值
一个
Tablespace
对象,如 第 2.3.28 节,“表空间类” 中所述。
- 描述
此方法获取一个
Undofile
对象,并提供 undo 文件所在节点的 ID 和文件系统路径。- 签名
Undofile getUndofile ( Uint32 nodeId, const char* path )
- 参数
-
此方法需要以下两个参数
undo 文件所在数据节点的
nodeId
;此值以 32 位无符号整数传递节点文件系统上 undo 文件的
path
(字符串作为字符指针)
- 返回值
Undofile
的实例。有关更多信息,请参见 第 2.3.29 节,“Undofile 类”。
- 描述
判断 NDB API 架构事务是否正在进行。
- 签名
bool hasSchemaTrans ( void ) const
- 参数
无.
- 返回值
如果架构事务正在进行,则返回布尔值
TRUE
,否则返回FALSE
。
- 描述
初始化表的默认哈希映射。
- 签名
-
int initDefaultHashMap ( HashMap& dst, Uint32 fragments )
或
int initDefaultHashMap ( HashMap& dst, Uint32 buckets, Uint32 fragments )
- 参数
对哈希映射的引用,以及片段数。可选地,桶数。
- 返回值
成功返回 0;失败返回 -1 并设置错误。
- 描述
此方法用于获取字典中对象的列表。可以获取字典中的所有对象,也可以将列表限制为单个类型的对象。
- 签名
-
此方法有两种签名
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 节,“列表类”。)可选的第二个参数type
可用于将列表限制为仅包含给定类型的对象——即,指定的Object::Type
。如果没有提供type
,则列表将包含字典中的所有对象。您还可以指定
list
中的对象名称是否为完全限定的名称(即,对象名称是否包含数据库、架构以及可能包括的表名称)。如果您指定fullyQualified
,则还必须指定type
。在 NDB 8.0.29 及更高版本中,您可以调用
clear()
来清空之前使用的List
以便重复使用。注意将
fullyQualified
设置为false
将导致listObjects()
返回使用完全限定名称的对象。 - 返回值
成功返回
0
,失败返回-1
。
- 描述
创建或检索适合修改的哈希映射。要求架构事务正在进行;有关更多信息,请参见 Dictionary::beginSchemaTrans()。
- 签名
-
以下任一项
int prepareHashMap ( const Table& oldTable, Table& newTable )
int prepareHashMap ( const Table& oldTable, Table& newTable, Uint32 buckets )
- 参数
对旧表和新表的引用。可选地,桶数。
- 返回值
成功返回 0;失败返回 -1 并设置错误。
- 描述
此方法用于在不再需要
Event
后释放该事件。通常情况下,这是由getEvent()
返回的事件。- 签名
void releaseEvent ( const Event* event )
- 参数
要清理的
Event
。- 返回值
无.
此方法是在 NDB 8.0.30 中添加的。