本节提供了有关 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。
- 描述
根据对该对象和
ObjectID 的引用,创建一个ForeignKey对象。- 签名
int createForeignKey ( const ForeignKey&, ObjectId* = 0, int flags = 0 )- 参数
对
ForeignKey对象的引用,以及ObjectID。如果使用可选值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 中添加的。