文档首页
MySQL NDB 集群 API 开发人员指南
相关文档 下载此手册
PDF (US Ltr) - 3.6Mb
PDF (A4) - 3.6Mb


2.3.1 列类

本节介绍 Column 类,它在 NDBCLUSTER 表中建模为一个列。

列类概述

父类

NdbDictionary

子类

描述

每个 Column 实例都以其类型为特征,该类型由许多类型说明符确定

  • 内置类型

  • 数组长度或最大长度

  • 精度和比例 (目前未使用)

  • 字符集(仅适用于使用字符串数据类型的列)

  • 内联大小和部分大小(仅适用于 blob 列)

这些类型通常对应于 MySQL 数据类型及其变体。数据格式与 MySQL 中的格式相同。NDB API 不提供构建此类格式的支持;但是,它们由 NDB 内核检查。

方法

下表列出了此类的公共方法以及每个方法的用途或使用场景

表 2.6 列类方法及其描述

方法 描述
Column() 类构造函数;还存在一个复制构造函数
~Column() 类析构函数
equal() 比较 Column 对象
getArrayType() 获取列的数组类型
getAutoIncrement() 显示列是否为自动递增
getCharset() 获取字符串(文本)列使用的字符集(不适用于不存储字符数据的列)
getColumnNo() 获取列号
getDefaultValue() 返回列的默认值
getInlineSize() 获取 blob 列的内联大小(不适用于其他列类型)
getLength() 获取列的长度
getName() 获取列的名称
getNullable() 检查列是否可以设置为 NULL
getPartitionKey() 检查列是否为表的分区键的一部分
getPartSize() 获取 blob 列的部分大小(不适用于其他列类型)
getPrecision() 获取列的精度(仅用于十进制类型)
getPrimaryKey() 检查列是否为表的主键的一部分
getScale() 获取列的比例(仅用于十进制类型)
getSize() 获取元素的大小
getSizeInBytesForRecord() 获取 NdbRecord 为列分配的空间,根据列的类型(在 NDB 7.4.7 中添加)
getStripeSize() 获取 BLOB 列的条带大小(不适用于其他列类型)
getStorageType() 获取此列使用的存储类型
getType() 获取列的类型 (Type 值)
setArrayType() 设置列的 ArrayType
setAutoIncrement() 设置列的自动递增标志
setAutoIncrementInitialValue() 设置自动递增列的起始值
setCharset() 设置包含字符数据的列使用的字符集(不适用于非文本列)
setDefaultValue() 设置列的默认值
setInlineSize() 设置 blob 列的内联大小(不适用于非 blob 类型列)
setLength() 设置列的长度
setName() 设置列的名称
setNullable() 切换列的可空性
setPartitionKey() 确定列是否为表的分区键的一部分
setPartSize() 设置 blob 列的部分大小(不适用于非 blob 类型列)
setPrecision() 设置列的精度(仅用于十进制类型)
setPrimaryKey() 确定列是否为主键的一部分
setScale() 设置列的比例(仅用于十进制类型)
setStorageType() 设置此列要使用的存储类型
setStripeSize() 设置 blob 列的条带大小(不适用于非 blob 类型列)
setType() 设置列的 Type

类型

这些是 Column 类的公共类型

表 2.7 列类类型及其描述se。

类型 描述
ArrayType 指定列的内部存储格式
StorageType 确定列是在内存中还是在磁盘上存储
类型 列的数据类型。 NDB 列与 MySQL 中的列具有相同的数据类型

赋值 (=) 运算符对此类进行了重载,因此它始终执行深拷贝。

重要

使用此类创建的列无法被 MySQL 服务器看到。这意味着它们无法被 MySQL 客户端访问,也无法被复制。出于这些原因,最好避免使用它们。

在 NDB API 中,列名区分大小写。(这与 MySQL C API 不同。)为了减少错误发生的可能性,建议您使用大写或小写一致地命名所有列。

与其他数据库对象一样,使用 NDB API 完成的 Column 对象创建和对现有列的属性更改对 MySQL 是不可见的。例如,如果您使用 Column::setType() 更改列的数据类型,MySQL 会认为列的类型保持不变。有关列的此规则的唯一例外是,您可以使用 Column::setName() 更改现有列的名称。

Column::ArrayType

抽象

本节介绍 ArrayType 数据类型,它表示列的内部属性格式。

描述

属性存储格式可以是固定格式或可变格式。

枚举值

下表显示了可能的值以及描述

表 2.8 列对象 ArrayType 数据类型值及其描述

名称 描述
ArrayTypeFixed 存储为固定数量的字节
ArrayTypeShortVar 以可变字节数存储;使用 1 字节开销
ArrayTypeMediumVar 以可变字节数存储;使用 2 字节开销

固定存储格式速度更快,但通常比可变格式占用更多空间。默认情况下,Var* 类型的默认值为 ArrayTypeShortVar,其他类型的默认值为 ArrayTypeFixed。默认值通常就足够了。

列构造函数

描述

您可以使用类构造函数创建一个新的 Column 或复制现有的 Column

使用 NDB API 创建的 Column 对 MySQL 服务器是不可见的。

NDB API 以区分大小写的方式处理列名。例如,如果您创建了一个名为 myColumn 的列,您将无法使用 Mycolumn 作为名称来访问它。您可以通过一致地使用大写或小写来命名所有列,从而减少出错的可能性。

签名

您可以创建一个新的 Column 类实例,也可以复制现有的 Column 对象。这两种方法都将在下面展示

  • 新建 Column 的构造函数

    Column
        (
          const char* name = ""
        )

  • 复制构造函数

    Column
        (
          const Column& column
        )
参数

在创建一个新的 Column 实例时,构造函数接受一个参数,即要创建的新列的名称。复制构造函数也接受一个参数 - 在这种情况下,是一个对要复制的 Column 实例的引用。

返回值

一个 Column 对象。

析构函数

Column 类析构函数不接受任何参数,也不返回任何值 (void)。

Column::equal()

描述

此方法用于比较两个 Column,以确定这两个 Column 对象是否相同。

签名
bool equal
    (
      const Column& column
    ) const
参数

equal() 接受一个参数,即对 Column 实例的引用。

返回值

如果正在比较的列相等,则返回 true,否则返回 false

Column::getArrayType()

描述

此方法获取列的数组类型。

签名
ArrayType getArrayType
    (
      void
    ) const
参数

.

返回值

一个 ArrayType;有关可能值的更多信息,请参见 Column::ArrayType

Column::getAutoIncrement()

描述

此方法显示列是否为自动递增列。

签名
bool getAutoIncrement
    (
      void
    ) const
参数

.

返回值

如果列为自动递增列,则返回 TRUE,否则返回 FALSE

Column::getCharset()

描述

此方法获取文本列使用的字符集。

此方法仅适用于 Type 值为 CharVarcharText 的列。

NDB API 以区分大小写的方式处理列名;myColumnMycolumn 不被视为指向同一列。建议您通过一致地使用大写或小写来命名所有列,从而最大限度地减少使用错误字母大小写导致错误的可能性。

签名
CHARSET_INFO* getCharset
    (
      void
    ) const
参数

.

返回值

指向一个 CHARSET_INFO 结构的指针,该结构指定字符集和排序规则。这与 MySQL MY_CHARSET_INFO 数据结构相同;有关更多信息,请参见 MySQL 手册中的 mysql_get_character_set_info()

Column::getColumnNo()

描述

此方法获取列在其包含的表或索引中的序号。如果列是索引的一部分(例如,由 getColumn() 返回时),它将映射到该索引中的位置,而不是包含该索引的表的索引中的位置。

签名
int getColumnNo
    (
      void
    ) const
参数

.

返回值

列号,以整数表示。

Column::getDefaultValue()

描述

获取列的默认值数据。

要确定表中是否存在任何带有默认值的列,请使用 Table::hasDefaultValues()

签名
const void* getDefaultValue
    (
      unsigned int* len = 0
    ) const
参数

len 包含默认值数据的长度,或者在列可为空或没有默认值的情况下包含 0。

返回值

默认值数据。

Column::getInlineSize()

描述

此方法检索 blob 列的内联大小 - 也就是说,要存储在表 blob 属性中的初始字节数。这部分通常位于主内存中,可以被索引。

此方法仅适用于 blob 列。

从 NDB 8.0.29 开始,您还可以通过查询 mysql 客户端中的 ndbinfo.blobs 表来获取此信息。

签名
int getInlineSize
    (
      void
    ) const
参数

.

返回值

blob 列的内联大小,以整数表示。

Column::getLength()

描述

此方法获取列的长度。这可以是列的数组长度,也可以是可变长度数组的最大长度。

签名
int getLength
    (
      void
    ) const
参数

.

返回值

列的(最大)数组长度,以整数表示。

Column::getName()

描述

此方法返回调用它的列的名称。

NDB API 以区分大小写的方式处理列名。例如,如果您为给定列检索了名称 myColumn,尝试使用 Mycolumn 作为名称来访问此列将导致错误,例如 Column is NULLTable definition has undefined column。您可以通过一致地使用大写或小写来命名所有列,从而减少出错的可能性。

签名
const char* getName
    (
      void
    ) const
参数

.

返回值

列的名称。

Column::getNullable()

描述

此方法用于确定列是否可以设置为 NULL

签名
bool getNullable
    (
      void
    ) const
参数

.

返回值

布尔值:如果列可以设置为 NULL,则为 true,否则为 false

Column::getPartitionKey()

描述

此方法用于检查列是否为表的划分键的一部分。

一个划分键是一组用于将元组分布到数据节点上的属性。此键使用特定于 NDB 存储引擎的哈希函数。

这在涉及多个仓库和区域的库存跟踪应用程序中很有用,在这些应用程序中,使用仓库 ID 和地区 ID 作为划分键可能是一个不错的选择。这将把特定地区和仓库的所有数据放置在同一存储节点中。在这种情况下,在每个片段的本地,仍然会将完整的主键与哈希算法一起使用。

有关 MySQL 中的划分、划分方案和划分键的更多信息,请参见 MySQL 手册中的 划分

对于与 NDB 存储引擎一起使用的用户定义的划分,唯一支持的类型是键划分,包括线性键划分。

签名
bool getPartitionKey
    (
      void
    ) const
参数

.

返回值

如果列是表划分键的一部分,则返回 true,否则返回 false

Column::getPartSize()

描述

此方法用于获取 BLOB 列的 blob 部分大小 - 也就是说,存储在 blob 表的每个元组中的字节数。

此方法仅适用于 BLOB 列。

在 NDB 8.0.29 及更高版本中,您还可以通过查询 mysql 客户端或其他 MySQL 客户端中的 ndbinfo.blobs 表来获取此信息。

签名
int getPartSize
    (
      void
    ) const
参数

.

返回值

列的部分大小,以整数表示。对于 Tinyblob 列,此值为 0(也就是说,只存储内联字节)。

Column::getPrecision()

描述

此方法获取列的精度。

此方法仅适用于小数列。

签名
int getPrecision
    (
      void
    ) const
参数

.

返回值

列的精度,以整数表示。精度定义为有效数字的个数;有关更多信息,请参见 MySQL 手册中 数值数据类型 中对 DECIMAL 数据类型的讨论。

Column::getPrimaryKey()

描述

此方法用于确定列是否为表的主键的一部分。

签名
bool getPrimaryKey
    (
      void
    ) const
参数

.

返回值

布尔值:如果列是此列所属表的 primary key 的一部分,则为 true,否则为 false

Column::getScale()

描述

此方法获取用于小数列值的比例。

此方法仅适用于小数列。

签名
int getScale
    (
      void
    ) const
参数

.

返回值

小数列的比例,以整数表示。小数列的比例表示可以存储在小数点后的数字位数。此值可以为 0。有关更多信息,请参见 MySQL 手册中 数值数据类型 中对 DECIMAL 数据类型的讨论。

Column::getSize()

描述

此函数用于获取列的大小。

签名
int getSize
    (
      void
    ) const
参数

.

返回值

列的大小,以字节为单位(一个整数值)。

Column::getSizeInBytesForRecord()

描述

获取给定列在 NdbRecord 中所需的空间,具体取决于列的类型,如下所示

  • 对于 BLOB 列,此值与 sizeof(NdbRecord*) 相同,即 4 或 8 字节(指针的大小;取决于平台)。

  • 对于所有其他类型的列,它与 getSize() 返回的值相同。

此方法是在 NDB NDB 7.4.7 中添加的。

签名
int getSizeInBytesForRecord
    (
      void
    ) const
参数

.

返回值

一个整数(参见描述)。

Column::getStorageType()

描述

此方法获取列的存储类型。

签名
StorageType getStorageType
    (
      void
    ) const
参数

.

返回值

一个 StorageType 值;有关此类型的更多信息,请参见 Column::StorageType

Column::getStripeSize()

描述

此方法获取 blob 列的条带大小 - 也就是说,要存储在每个节点组中的连续部分的个数。

签名
int getStripeSize
    (
      void
    ) const
参数

.

返回值

列的条带大小,以整数表示。

Column::getType()

描述

此方法获取列的数据类型。

签名
Type getType
    (
      void
    ) const
参数

.

返回值

列的 Type(数据类型)。有关可能值的列表,请参见 Column::Type

Column::setArrayType()

描述

设置列的数组类型。

签名
void setArrayType
    (
      ArrayType type
    )
参数

一个 Column::ArrayType 值。有关更多信息,请参见 Column::ArrayType

返回值

.

Column::setAutoIncrement()

描述

使列自动递增(或不递增)。

签名
void setAutoIncrement
    (
      bool flag
    )
参数

一个布尔值:TRUE 使列自动递增;FALSE 删除列的此属性。

返回值

.

Column::setAutoIncrementInitialValue()

描述

设置自动递增列的初始值。

签名
void setAutoIncrementInitialValue
    (
      Uint64 value
    )
参数

列的初始值(一个 64 位整数)。

返回值

.

Column::setCharset()

描述

此方法可用于设置 CharVarcharText 列的字符集和排序规则。

此方法仅适用于 CharVarcharText 列。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setCharset
    (
      CHARSET_INFO* cs
    )
参数

此方法接受一个参数。 cs 是指向 CHARSET_INFO 结构的指针。有关更多信息,请参阅 Column::getCharset()

返回值

.

Column::setDefaultValue()

描述

此方法将列值设置为其默认值(如果有);否则将列设置为 NULL

要确定表中是否存在任何带有默认值的列,请使用 Table::hasDefaultValues()

签名
int setDefaultValue
    (
      const void* buf,
      unsigned int len
    )
参数

此方法接受 2 个参数:值指针 buf;以及数据的长度 len,以有效字节数表示。对于固定大小类型,这是类型大小。对于可变长度类型,由 buffer 指向的前 1 或 2 个字节也包含类型正常的尺寸信息。

返回值

成功返回 0,失败返回 1。

Column::setInlineSize

描述

此方法获取 blob 列的内联大小,即存储在表 blob 属性中的初始字节数。此部分通常保存在主内存中,可以被索引和解释。

此方法仅适用于 blob 列。

使用此方法对列进行的更改对 MySQL 不可見。从 NDB 8.0.30 开始,您可以通过在 mysql 客户端中设置 BLOB_INLINE_SIZE 来更改 blob 列的内联大小,该大小作为 CREATE TABLEALTER TABLE 的一部分出现在列注释中。有关更多信息,请参阅 NDB_COLUMN 选项

签名
void setInlineSize
    (
      int size
    )
参数

整数 size 是 blob 列的新内联大小。

返回值

.

Column::setLength()

描述

此方法设置列的长度。对于可变长度数组,这是最大长度;否则是数组长度。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setLength
    (
      int length
    )
参数

此方法接受一个参数:整数 length 是列的新长度。

返回值

.

Column::setName()

描述

此方法用于设置列的名称。

setName() 是唯一一个其结果对 MySQL 服务器可见的 Column 方法。MySQL 无法看到使用 NDB API 对现有列进行的任何其他更改。

签名
void setName
    (
      const char* name
    )
参数

此方法接受一个参数:列的新名称。

返回值

此方法 None

Column::setNullable()

描述

此方法切换列的可空性。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setNullable
    (
      bool nullable
    )
参数

布尔值。使用 true 可以在列中插入 NULL;如果 nullablefalse,则此方法执行与在 MySQL 中将列更改为 NOT NULL 相同的操作。

返回值

.

Column::setPartitionKey()

描述

此方法可以将列添加到其所属表的分区键中,也可以从表的分区键中删除列。

使用此方法对列进行的更改对 MySQL 不可見。

有关更多信息,请参阅 Column::getPartitionKey()

签名
void setPartitionKey
    (
      bool enable
    )
参数

单个参数 enable 是一个布尔值。将 true 传递给此方法将使列成为表分区键的一部分;如果 enablefalse,则从分区键中删除该列。

返回值

.

Column::setPartSize()

描述

此方法设置 blob 列的 blob 部分大小,即存储在 blob 表每个元组中的字节数。

此方法仅适用于 blob 列。

使用此方法对列进行的更改对 MySQL 不可見。您可以在 mysql 或其他 MySQL 客户端中将 blob 列的 blob 部分大小增加到 NDB 支持的最大值(13948),方法是在 CREATE TABLEALTER TABLE 语句中设置列注释中的 MAX_BLOB_PART_SIZE 选项。参阅 NDB_COLUMN 选项

签名
void setPartSize
    (
      int size
    )
参数

整数 size 是存储在 blob 表中的字节数。将此值设置为零表示只能存储内联字节,实际上使列类型为 TINYBLOB

返回值

.

Column::setPrecision()

描述

此方法可用于设置十进制列的精度。

此方法仅适用于小数列。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setPrecision
    (
      int precision
    )
参数

此方法接受一个参数:精度是一个整数,是列新精度的值。有关十进制精度和比例的更多信息,请参阅 Column::getPrecision()Column::getScale()

返回值

.

Column::setPrimaryKey()

描述

此方法用于使列成为表主键的一部分,或将其从主键中删除。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setPrimaryKey
    (
      bool primary
    )
参数

此方法接受一个布尔值。如果为 true,则该列成为表主键的一部分;如果为 false,则从主键中删除该列。

返回值

.

Column::setScale()

描述

此方法可用于设置十进制列的比例。

此方法仅适用于小数列。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setScale
    (
      int scale
    )
参数

此方法接受一个参数:整数 scale 是十进制列的新比例。有关十进制精度和比例的更多信息,请参阅 Column::getPrecision()Column::getScale()

返回值

.

Column::setStripeSize()

描述

此方法设置 blob 列的条带大小,即存储在每个节点组中的连续部分数。

此方法仅适用于 blob 列。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setStripeSize
    (
      int size
    )
参数

此方法接受一个参数。整数 size 是列的新条带大小。

返回值

.

Column::setStorageType()

描述

设置列的存储类型。

签名
void setStorageType
    (
      StorageType type
    )
参数

一个 Column::StorageType 值。有关更多信息,请参阅 Column::StorageType

返回值

.

Column::setType()

描述

此方法设置列的 Type(数据类型)。

setType() 将所有列属性重置为其(类型相关)默认值;它应该是您更改给定列的属性时调用的第一个方法。

使用此方法对列进行的更改对 MySQL 不可見。

签名
void setType
    (
      Type type
    )
参数

此方法接受一个参数:列的新 Column::Type。默认值为 Unsigned。有关所有允许值的列表,请参阅 Column::Type

返回值

.

Column::StorageType

本节提供有关 StorageType 数据类型的相关信息,该数据类型描述了 Column 对象使用的存储类型。

描述

给定列使用的存储类型可以是内存中的,也可以是磁盘上的。存储在磁盘上的列意味着总体上需要更少的 RAM,但此类列无法被索引,访问速度可能慢很多。默认值为 StorageTypeMemory

枚举值

下表显示了可能的值以及描述

表 2.9 列对象 StorageType 数据类型值和描述

名称 描述
StorageTypeMemory 将列存储在内存中
StorageTypeDisk 将列存储在磁盘上

Column::Type

本节提供有关 Type 数据类型的相关信息,该数据类型用于描述列的数据类型。

描述

Column 对象的数据类型类似于 MySQL 使用的数据类型。类型 TinyintTinyintunsignedSmallintSmallunsignedMediumintMediumunsignedIntUnsignedBigintBigunsignedFloatDouble(即枚举值表中列出的类型 TinyintDouble,按顺序)可以用在数组中。

不要将 Column::TypeObject::Type 混淆。

枚举值

下表显示了可能的值以及描述

表 2.10 列对象 Type 数据类型值和描述

名称 描述
Undefined Undefined
Tinyint 1 字节有符号整数
Tinyunsigned 1 字节无符号整数
Smallint 2 字节有符号整数
Smallunsigned 2 字节无符号整数
Mediumint 3 字节有符号整数
Mediumunsigned 3 字节无符号整数
Int 4 字节有符号整数
Unsigned 4 字节无符号整数
Bigint 8 字节有符号整数
Bigunsigned 8 字节有符号整数
Float 4 字节浮点数
Double 8 字节浮点数
Olddecimal MySQL 5.0 之前使用的有符号十进制数(已过时)
Olddecimalunsigned MySQL 5.0 之前使用的无符号十进制数(已过时)
Decimal MySQL 5.0 及更高版本使用的有符号十进制数
Decimalunsigned MySQL 5.0 及更高版本使用的无符号十进制数
Char 固定长度的 1 字节字符数组;最大长度为 255 个字符
Varchar 可变长度的 1 字节字符数组;最大长度为 255 个字符
Binary 固定长度的 1 字节二进制字符数组;最大长度为 255 个字符
Varbinary 可变长度的 1 字节二进制字符数组;最大长度为 255 个字符
Datetime 8 字节日期和时间值,精度为 1 秒(已过时)
Datetime2 8 字节日期和时间值,包含小数秒。
Date 4 字节日期值,精度为 1 天
Blob 二进制大对象;参阅 第 2.3.13 节,“NdbBlob 类”
Text 文本 blob
Bit 位值;长度指定位数
Longvarchar 2 字节 Varchar
Longvarbinary 2 字节 Varbinary
Time 没有日期的时间(已过时)
Time2 没有日期的时间,包含小数秒。
Year 1 字节年份值,范围为 1901-2155(与 MySQL 相同)
Timestamp Unix 时间(已过时)
Timestamp2 Unix 时间,包含小数秒。

NDB API 提供对具有微秒的时间类型的访问 (TIMEDATETIMETIMESTAMP),分别为 Time2Datetime2Timestamp2。(TimeDatetimeTimestamp 从同一版本开始已过时。)使用 setPrecision() 设置最多 6 位小数(默认值为 0)。数据格式与 MySQL 中的格式相同,必须使用正确的字节长度。

由于 NDB 可以将这些值中的任何一个作为二进制字符串进行比较,因此它不会对实际数据进行任何检查。