本节介绍 Column
类,它在 NDBCLUSTER
表中建模为一个列。
- 父类
- 子类
无
- 描述
-
每个
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()
更改现有列的名称。
抽象
本节介绍 ArrayType
数据类型,它表示列的内部属性格式。
固定存储格式速度更快,但通常比可变格式占用更多空间。默认情况下,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
)。
- 描述
此方法获取列的数组类型。
- 签名
ArrayType getArrayType ( void ) const
- 参数
无.
- 返回值
一个
ArrayType
;有关可能值的更多信息,请参见 Column::ArrayType。
- 描述
-
此方法获取文本列使用的字符集。
此方法仅适用于
Type
值为Char
、Varchar
或Text
的列。NDB API 以区分大小写的方式处理列名;“myColumn” 和 “Mycolumn” 不被视为指向同一列。建议您通过一致地使用大写或小写来命名所有列,从而最大限度地减少使用错误字母大小写导致错误的可能性。
- 签名
CHARSET_INFO* getCharset ( void ) const
- 参数
无.
- 返回值
指向一个
CHARSET_INFO
结构的指针,该结构指定字符集和排序规则。这与 MySQLMY_CHARSET_INFO
数据结构相同;有关更多信息,请参见 MySQL 手册中的 mysql_get_character_set_info()。
- 描述
此方法获取列在其包含的表或索引中的序号。如果列是索引的一部分(例如,由
getColumn()
返回时),它将映射到该索引中的位置,而不是包含该索引的表的索引中的位置。- 签名
int getColumnNo ( void ) const
- 参数
无.
- 返回值
列号,以整数表示。
- 描述
-
获取列的默认值数据。
要确定表中是否存在任何带有默认值的列,请使用
Table::hasDefaultValues()
。 - 签名
const void* getDefaultValue ( unsigned int* len = 0 ) const
- 参数
len
包含默认值数据的长度,或者在列可为空或没有默认值的情况下包含 0。- 返回值
默认值数据。
- 描述
-
此方法检索 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 NULL 或 Table definition has undefined column。您可以通过一致地使用大写或小写来命名所有列,从而减少出错的可能性。
- 签名
const char* getName ( void ) const
- 参数
无.
- 返回值
列的名称。
- 描述
此方法用于确定列是否可以设置为
NULL
。- 签名
bool getNullable ( void ) const
- 参数
无.
- 返回值
布尔值:如果列可以设置为
NULL
,则为true
,否则为false
。
- 描述
-
此方法用于检查列是否为表的划分键的一部分。
一个划分键是一组用于将元组分布到数据节点上的属性。此键使用特定于
NDB
存储引擎的哈希函数。这在涉及多个仓库和区域的库存跟踪应用程序中很有用,在这些应用程序中,使用仓库 ID 和地区 ID 作为划分键可能是一个不错的选择。这将把特定地区和仓库的所有数据放置在同一存储节点中。在这种情况下,在每个片段的本地,仍然会将完整的主键与哈希算法一起使用。
有关 MySQL 中的划分、划分方案和划分键的更多信息,请参见 MySQL 手册中的 划分。
对于与
NDB
存储引擎一起使用的用户定义的划分,唯一支持的类型是键划分,包括线性键划分。 - 签名
bool getPartitionKey ( void ) const
- 参数
无.
- 返回值
如果列是表划分键的一部分,则返回
true
,否则返回false
。
- 描述
-
此方法用于获取 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
- 参数
无.
- 返回值
布尔值:如果列是此列所属表的 primary key 的一部分,则为
true
,否则为false
。
- 描述
-
此方法获取用于小数列值的比例。
此方法仅适用于小数列。
- 签名
int getScale ( void ) const
- 参数
无.
- 返回值
小数列的比例,以整数表示。小数列的比例表示可以存储在小数点后的数字位数。此值可以为
0
。有关更多信息,请参见 MySQL 手册中 数值数据类型 中对DECIMAL
数据类型的讨论。
- 描述
此方法获取列的存储类型。
- 签名
StorageType getStorageType ( void ) const
- 参数
无.
- 返回值
一个
StorageType
值;有关此类型的更多信息,请参见 Column::StorageType。
- 描述
此方法获取 blob 列的条带大小 - 也就是说,要存储在每个节点组中的连续部分的个数。
- 签名
int getStripeSize ( void ) const
- 参数
无.
- 返回值
列的条带大小,以整数表示。
- 描述
设置列的数组类型。
- 签名
void setArrayType ( ArrayType type )
- 参数
一个
Column::ArrayType
值。有关更多信息,请参见 Column::ArrayType。- 返回值
无.
- 描述
-
此方法可用于设置
Char
、Varchar
或Text
列的字符集和排序规则。此方法仅适用于
Char
、Varchar
和Text
列。使用此方法对列进行的更改对 MySQL 不可見。
- 签名
void setCharset ( CHARSET_INFO* cs )
- 参数
此方法接受一个参数。
cs
是指向CHARSET_INFO
结构的指针。有关更多信息,请参阅 Column::getCharset()。- 返回值
无.
- 描述
-
此方法将列值设置为其默认值(如果有);否则将列设置为
NULL
。要确定表中是否存在任何带有默认值的列,请使用
Table::hasDefaultValues()
。 - 签名
int setDefaultValue ( const void* buf, unsigned int len )
- 参数
此方法接受 2 个参数:值指针
buf
;以及数据的长度len
,以有效字节数表示。对于固定大小类型,这是类型大小。对于可变长度类型,由buffer
指向的前 1 或 2 个字节也包含类型正常的尺寸信息。- 返回值
成功返回 0,失败返回 1。
- 描述
-
此方法获取 blob 列的内联大小,即存储在表 blob 属性中的初始字节数。此部分通常保存在主内存中,可以被索引和解释。
此方法仅适用于 blob 列。
使用此方法对列进行的更改对 MySQL 不可見。从 NDB 8.0.30 开始,您可以通过在 mysql 客户端中设置
BLOB_INLINE_SIZE
来更改 blob 列的内联大小,该大小作为CREATE TABLE
或ALTER TABLE
的一部分出现在列注释中。有关更多信息,请参阅 NDB_COLUMN 选项。 - 签名
void setInlineSize ( int size )
- 参数
整数
size
是 blob 列的新内联大小。- 返回值
无.
- 描述
-
此方法设置列的长度。对于可变长度数组,这是最大长度;否则是数组长度。
使用此方法对列进行的更改对 MySQL 不可見。
- 签名
void setLength ( int length )
- 参数
此方法接受一个参数:整数
length
是列的新长度。- 返回值
无.
- 描述
-
此方法用于设置列的名称。
setName()
是唯一一个其结果对 MySQL 服务器可见的Column
方法。MySQL 无法看到使用 NDB API 对现有列进行的任何其他更改。 - 签名
void setName ( const char* name )
- 参数
此方法接受一个参数:列的新名称。
- 返回值
此方法 None。
- 描述
-
此方法切换列的可空性。
使用此方法对列进行的更改对 MySQL 不可見。
- 签名
void setNullable ( bool nullable )
- 参数
布尔值。使用
true
可以在列中插入NULL
;如果nullable
为false
,则此方法执行与在 MySQL 中将列更改为NOT NULL
相同的操作。- 返回值
无.
- 描述
-
此方法可以将列添加到其所属表的分区键中,也可以从表的分区键中删除列。
使用此方法对列进行的更改对 MySQL 不可見。
有关更多信息,请参阅 Column::getPartitionKey()。
- 签名
void setPartitionKey ( bool enable )
- 参数
单个参数
enable
是一个布尔值。将true
传递给此方法将使列成为表分区键的一部分;如果enable
为false
,则从分区键中删除该列。- 返回值
无.
- 描述
-
此方法设置 blob 列的 blob 部分大小,即存储在 blob 表每个元组中的字节数。
此方法仅适用于 blob 列。
使用此方法对列进行的更改对 MySQL 不可見。您可以在 mysql 或其他 MySQL 客户端中将 blob 列的 blob 部分大小增加到
NDB
支持的最大值(13948),方法是在CREATE TABLE
或ALTER TABLE
语句中设置列注释中的MAX_BLOB_PART_SIZE
选项。参阅 NDB_COLUMN 选项。 - 签名
void setPartSize ( int size )
- 参数
整数
size
是存储在 blob 表中的字节数。将此值设置为零表示只能存储内联字节,实际上使列类型为TINYBLOB
。- 返回值
无.
- 描述
-
此方法可用于设置十进制列的精度。
此方法仅适用于小数列。
使用此方法对列进行的更改对 MySQL 不可見。
- 签名
void setPrecision ( int precision )
- 参数
此方法接受一个参数:精度是一个整数,是列新精度的值。有关十进制精度和比例的更多信息,请参阅 Column::getPrecision() 和 Column::getScale()。
- 返回值
无.
- 描述
-
此方法用于使列成为表主键的一部分,或将其从主键中删除。
使用此方法对列进行的更改对 MySQL 不可見。
- 签名
void setPrimaryKey ( bool primary )
- 参数
此方法接受一个布尔值。如果为
true
,则该列成为表主键的一部分;如果为false
,则从主键中删除该列。- 返回值
无.
- 描述
-
此方法可用于设置十进制列的比例。
此方法仅适用于小数列。
使用此方法对列进行的更改对 MySQL 不可見。
- 签名
void setScale ( int scale )
- 参数
此方法接受一个参数:整数
scale
是十进制列的新比例。有关十进制精度和比例的更多信息,请参阅 Column::getPrecision() 和 Column::getScale()。- 返回值
无.
- 描述
-
此方法设置 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。- 返回值
无.
本节提供有关 Type
数据类型的相关信息,该数据类型用于描述列的数据类型。
- 描述
-
Column
对象的数据类型类似于 MySQL 使用的数据类型。类型Tinyint
、Tinyintunsigned
、Smallint
、Smallunsigned
、Mediumint
、Mediumunsigned
、Int
、Unsigned
、Bigint
、Bigunsigned
、Float
和Double
(即枚举值表中列出的类型Tinyint
到Double
,按顺序)可以用在数组中。不要将
Column::Type
与Object::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 提供对具有微秒的时间类型的访问 (TIME
、DATETIME
和 TIMESTAMP
),分别为 Time2
、Datetime2
和 Timestamp2
。(Time
、Datetime
和 Timestamp
从同一版本开始已过时。)使用 setPrecision()
设置最多 6 位小数(默认值为 0)。数据格式与 MySQL 中的格式相同,必须使用正确的字节长度。
由于 NDB
可以将这些值中的任何一个作为二进制字符串进行比较,因此它不会对实际数据进行任何检查。