2.3.1 列类

本节提供有关 Column类的信息,该类对表中的列进行建模 NDBCLUSTER

列类概述

家长班

NdbDictionary

儿童班

没有任何

描述

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

  • 内置型

  • 数组长度或最大长度

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

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

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

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

方法

下表列出了该类的公共方法以及每个方法的用途或用途:

表 2.5 列类方法及说明

方法 描述
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.3.10 和 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.6 列类类型和描述e。

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

赋值 ( =) 运算符为此类重载,因此它始终执行深层复制。

重要的

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

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

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

列::数组类型

抽象的

此部分提供有关 ArrayType数据类型的信息,它表示列的内部属性格式。

描述

属性存储格式可以是固定的,也可以是可变的。

枚举值

下表显示了可能的值以及说明:

表 2.7 Column 对象 ArrayType 数据类型值和说明

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

固定存储格式速度更快,但通常也比可变格式需要更多空间。默认值 ArrayTypeShortVar适用于Var* 类型和ArrayTypeFixed其他类型。默认值通常就足够了。

列构造器

描述

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

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

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

签名

您可以创建 Column该类的新实例,也可以通过复制现有Column对象来创建。这两个都显示在这里:

  • 新的构造函数 Column

    Column
        (
          const char* name = ""
        )

  • 复制构造函数:

    Column
        (
          const Column& column
        )
参数

创建 的新实例时 Column,构造函数采用单个参数,即要创建的新列的名称。复制构造函数也有一个参数——在本例中,是对 Column要复制的实例的引用。

返回值

一个Column对象。

析构函数

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

列::等于()

描述

此方法用于将一个 对象Column与另一个对象进行比较,以确定两个 Column对象是否相同。

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

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

返回值

true如果被比较的列相等,否则false.

列::getArrayType()

描述

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

签名
ArrayType getArrayType
    (
      void
    ) const
参数

没有

返回值

一个ArrayType; 有关可能的值,请参阅 Column::ArrayType

列::getAutoIncrement()

描述

该方法判断该列是否为自增列。

签名
bool getAutoIncrement
    (
      void
    ) const
参数

没有

返回值

TRUE如果列是自增列,FALSE如果不是。

列::获取字符集()

描述

这将获取文本列使用的字符集。

此方法仅适用于 Type值为CharVarchar或的列Text

NDB API 以区分大小写的方式处理列名; myColumnMycolumn不被视为指代同一列。建议您通过仅使用大写字母或仅使用小写字母一致地命名所有列,将因使用错误的字母大小写作为列名而导致错误的可能性降至最低。

签名
CHARSET_INFO* getCharset
    (
      void
    ) const
参数

没有

返回值

指向同时CHARSET_INFO指定字符集和排序规则的结构的指针。这与 MySQLMY_CHARSET_INFO数据结构相同;有关详细信息,请参阅 MySQL 手册中的mysql_get_character_set_info()

列::getColumnNo()

描述

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

签名
int getColumnNo
    (
      void
    ) const
参数

没有

返回值

作为整数的列号。

列::获取默认值()

描述

获取列的默认值数据。

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

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

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

返回值

默认值数据。

列::getInlineSize()

描述

此方法检索 blob 列的内联大小,即要存储在表的 blob 属性中的初始字节数。这部分通常在主存中并且可以被索引。

此方法仅适用于 blob 列。

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

签名
int getInlineSize
    (
      void
    ) const
参数

没有

返回值

blob 列的内联大小,作为整数。

列::获取长度()

描述

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

签名
int getLength
    (
      void
    ) const
参数

没有

返回值

列的(最大)数组长度,作为整数。

列::获取名称()

描述

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

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

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

没有

返回值

列的名称。

列::getNullable()

描述

该方法用于判断该列是否可以设置为NULL

签名
bool getNullable
    (
      void
    ) const
参数

没有

返回值

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

列::getPartitionKey()

描述

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

分区键是 一组用于将元组分布到数据节点上的属性。这个键是 NDB存储引擎特有的散列函数。

一个有用的示例是涉及多个仓库和区域的库存跟踪应用程序,其中最好使用仓库 ID 和地区 ID 作为分区键。这会将特定区域和仓库的所有数据放在同一个存储节点中。在这种情况下,在每个片段的本地,完整的主键仍将与散列算法一起使用。

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

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

签名
bool getPartitionKey
    (
      void
    ) const
参数

没有

返回值

true如果该列是表的分区键的一部分,否则 false

列::getPartSize()

描述

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

此方法仅适用于 BLOB 列。

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

签名
int getPartSize
    (
      void
    ) const
参数

没有

返回值

列的部分大小,作为整数。在 Tinyblob列的情况下,此值为 0(即仅存储内联字节)。

列::获取精度()

描述

此方法获取列的精度。

此方法仅适用于十进制列。

签名
int getPrecision
    (
      void
    ) const
参数

没有

返回值

列的精度,作为整数。精度定义为有效位数;有关详细信息,请参阅 MySQL 手册 中数值数据类型DECIMAL中对数据类型 的讨论。

列::获取主键()

描述

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

签名
bool getPrimaryKey
    (
      void
    ) const
参数

没有

返回值

一个布尔值:true如果该列是该列所属表的主键的一部分,否则false

列::getScale()

描述

此方法获取用于十进制列值的比例。

此方法仅适用于十进制列。

签名
int getScale
    (
      void
    ) const
参数

没有

返回值

小数列的小数位数,作为整数。小数列的刻度表示小数点后可以存储的位数。这个值有可能是0. 有关详细信息,请参阅MySQL 手册 中数值数据类型DECIMAL中对数据类型的讨论。

列::获取大小()

描述

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

签名
int getSize
    (
      void
    ) const
参数

没有

返回值

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

列::getSizeInBytesForRecord()

描述

根据列的类型,通过 获取给定列所需的空间 NdbRecord,如下所示:

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

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

NDB 7.3.10 和 NDB 7.4.7 添加了此方法。

签名
int getSizeInBytesForRecord
    (
      void
    ) const
参数

没有

返回值

一个整数(见说明)。

列::getStorageType()

描述

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

签名
StorageType getStorageType
    (
      void
    ) const
参数

没有

返回值

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

列::getStripeSize()

描述

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

签名
int getStripeSize
    (
      void
    ) const
参数

没有

返回值

列的条带大小,作为整数。

列::获取类型()

描述

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

签名
Type getType
    (
      void
    ) const
参数

没有

返回值

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

列::设置数组类型()

描述

设置列的数组类型。

签名
void setArrayType
    (
      ArrayType type
    )
参数

一个Column::ArrayType值。有关详细信息,请参阅Column::ArrayType

返回值

没有

列::设置自动增量()

描述

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

签名
void setAutoIncrement
    (
      bool flag
    )
参数

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

返回值

没有

列::setAutoIncrementInitialValue()

描述

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

签名
void setAutoIncrementInitialValue
    (
      Uint64 value
    )
参数

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

返回值

没有

列::设置字符集()

描述

此方法可用于设置 、 或 列的字符集和Char排序 Varchar规则Text

此方法仅适用于CharVarcharText 列。

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setCharset
    (
      CHARSET_INFO* cs
    )
参数

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

返回值

没有

列::设置默认值()

描述

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

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

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

这个方法有两个参数:一个值指针 buf;和数据的长度 len,作为有效字节数。对于固定大小的类型,这是类型大小。对于可变长度类型,由 指向的前导 1 或 2 个字节buffer还包含该类型正常的大小信息。

返回值

0 成功,1 失败..

列::setInlineSize

描述

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

此方法仅适用于 blob 列。

使用此方法对列所做的更改对 MySQL 不可见。从 NDB 8.0.30 开始,您可以通过将列注释设置为or的一部分来更改mysql客户端中 blob 列的内联大小。有关详细信息,请参阅 NDB_COLUMN 选项BLOB_INLINE_SIZECREATE TABLEALTER TABLE

签名
void setInlineSize
    (
      int size
    )
参数

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

返回值

没有

列::设置长度()

描述

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

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setLength
    (
      int length
    )
参数

此方法采用单个参数——整数值 length是列的新长度。

返回值

没有

列::设置名称()

描述

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

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

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

此方法采用单个参数——列的新名称。

返回值

此方法

列::设置为空()

描述

此方法切换列的可空性。

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setNullable
    (
      bool nullable
    )
参数

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

返回值

没有

列::设置分区键()

描述

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

使用此方法对列所做的更改对 MySQL 不可见。

有关其他信息,请参阅 Column::getPartitionKey()

签名
void setPartitionKey
    (
      bool enable
    )
参数

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

返回值

没有

列::setPartSize()

描述

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

此方法仅适用于 blob 列。

使用此方法对列所做的更改对 MySQL 不可见。您可以通过将列注释中的选项设置为or语句的一部分,将 blob 列的 blob 部分大小增加到mysql或其他 MySQL 客户端NDB(13948)支持的最大值。请参阅 NDB_COLUMN 选项MAX_BLOB_PART_SIZECREATE TABLEALTER TABLE

签名
void setPartSize
    (
      int size
    )
参数

整数size是要存储在 blob 表中的字节数。对此值使用零意味着只能存储内联字节,实际上使该列成为 type TINYBLOB

返回值

没有

列::设置精度()

描述

此方法可用于设置小数列的精度。

此方法仅适用于十进制列。

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setPrecision
    (
      int precision
    )
参数

此方法采用单个参数——precision 是一个整数,即列的新精度值。有关小数精度和小数位数的其他信息,请参阅Column::getPrecision()Column::getScale()

返回值

没有

列::设置主键()

描述

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

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setPrimaryKey
    (
      bool primary
    )
参数

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

返回值

没有

列::设置比例尺()

描述

此方法可用于设置小数列的小数位数。

此方法仅适用于十进制列。

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setScale
    (
      int scale
    )
参数

此方法采用单个参数——整数 scale是小数列的新比例。有关小数精度和小数位数的其他信息,请参阅 Column::getPrecision()Column::getScale()

返回值

没有

列::setStripeSize()

描述

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

此方法仅适用于 blob 列。

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setStripeSize
    (
      int size
    )
参数

此方法采用单个参数。该整数 size是该列的新条带大小。

返回值

没有

列::设置存储类型()

描述

设置列的存储类型。

签名
void setStorageType
    (
      StorageType type
    )
参数

一个Column::StorageType 值。有关详细信息,请参阅Column::StorageType

返回值

没有

列::设置类型()

描述

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

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

使用此方法对列所做的更改对 MySQL 不可见。

签名
void setType
    (
      Type type
    )
参数

此方法采用单个参数—— Column::Type列的新参数。默认值为Unsigned。有关所有允许值的列表,请参阅 Column::Type

返回值

没有

列::存储类型

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

描述

用于给定列的存储类型可以在内存中或在磁盘上。存储在磁盘上的列意味着总体上需要更少的 RAM,但这些列不能被索引,并且访问速度可能要慢得多。默认值为 StorageTypeMemory

枚举值

下表显示了可能的值以及说明:

表 2.8 Column 对象 StorageType 数据类型值和说明

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

列::类型

此部分提供有关 Type数据类型的信息,用于描述列的数据类型。

描述

对象的数据类型Column 类似于 MySQL 使用的数据类型。类型Tinyint, Tinyintunsigned, Smallint, Smallunsigned, Mediumint, Mediumunsigned, Int, Unsigned, Bigint, Bigunsigned, Float, 和Double(即,按照枚举值表中列出的顺序排列的类型 TinyintDouble 可以在数组中使用。

不要Column::Type与 混淆Object::Type

枚举值

下表显示了可能的值以及说明:

表 2.9 列对象类型数据类型值和说明

姓名 描述
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 一个文本块
Bit 一点价值;长度指定位数
Longvarchar 一个2字节Varchar
Longvarbinary 一个2字节Varbinary
Time 没有日期的时间(已弃用)
Time2 没有日期的时间,带有小数秒。
Year 1901-2155 范围内的 1 字节年份值(与 MySQL 相同)
Timestamp Unix 时间(已弃用)
Timestamp2 Unix 时间,带小数秒。

NDB API 提供对微秒( 、 和 )的时间类型的TIME访问 DATETIMETIMESTAMPTime2Datetime2Timestamp2。(TimeDatetimeTimestamp在同一版本中已弃用。) setPrecision()用于设置最多 6 个小数位(默认为 0)。数据格式与 MySQL 中一样,必须使用正确的字节长度。

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