在 NDB Cluster 中,CREATE
TABLE
orALTER TABLE
语句中的列注释也可用于指定
NDB_COLUMN
选项。NDB 7.3 和 7.4 支持单列注释选项
MAX_BLOB_PART_SIZE
;此选项的语法显示如下:
COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE[={0|1}]'
符号及其后面的=
值是可选的。使用 0 或 1 以外的任何值都会导致语法错误。
此选项的作用是将
TEXT
or
列的 blob 部分大小设置为(13948)BLOB
支持的最大字节数。NDB
此选项可应用于 MySQL 支持的任何 blob 列类型,但TINYBLOB
or
TINYTEXT
( BLOB
,
MEDIUMBLOB
, LONGBLOB
,
TEXT
,
MEDIUMTEXT
, orLONGTEXT
除外)。
要查看此选项的效果,我们首先在mysql客户端中运行以下 SQL 语句来创建一个包含两BLOB
列的表,一列 ( c1
) 没有额外选项,另一列 ( c2
) 包含
MAX_BLOB_PART_SIZE
:
mysql> CREATE TABLE test.t (
-> p INT PRIMARY KEY,
-> c1 BLOB,
-> c2 BLOB COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE'
-> ) ENGINE NDB;
Query OK, 0 rows affected (0.32 sec)
在系统 shell 中,运行ndb_desc 实用程序以获取有关刚创建的表的信息,如本例所示:
$> ndb_desc -d test t
-- t --
Version: 1
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 3
Number of primary keys: 1
Length of frm data: 324
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
FragmentCount: 2
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
HashMap: DEFAULT-HASHMAP-3840-2
-- Attributes --
p Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
c1 Blob(256,2000,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_22_1
c2 Blob(256,13948,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_22_2
-- Indexes --
PRIMARY KEY(p) - UniqueHashIndex
PRIMARY(p) - OrderedIndex
输出中的列信息列在
Attributes
; 对于列c1
,c2
它在此处以强调文本显示。对于c1
,blob 部分大小为 2000,默认值;对于c2
,它是 13948,由 设置
MAX_BLOB_PART_SIZE
。
NDB
您可以使用如下语句更改表
的给定 blob 列的 blob 部分大小,
ALTER
TABLE
然后使用以下语句验证更改SHOW CREATE
TABLE
:
mysql> ALTER TABLE test.t
-> DROP COLUMN c1,
-> ADD COLUMN c1 BLOB COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE',
-> CHANGE COLUMN c2 c2 BLOB AFTER c1;
Query OK, 0 rows affected (0.47 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE test.t\G
*************************** 1. row ***************************
Table: t
Create Table: CREATE TABLE `t` (
`p` int(11) NOT NULL,
`c1` blob COMMENT 'NDB_COLUMN=MAX_BLOB_PART_SIZE',
`c2` blob,
PRIMARY KEY (`p`)
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
mysql> EXIT
Bye
ndb_desc 的输出显示列的 blob 部分大小已按预期更改:
$> ndb_desc -d test t
-- t --
Version: 16777220
Fragment type: HashMapPartition
K Value: 6
Min load factor: 78
Max load factor: 80
Temporary table: no
Number of attributes: 3
Number of primary keys: 1
Length of frm data: 324
Row Checksum: 1
Row GCI: 1
SingleUserMode: 0
ForceVarPart: 1
FragmentCount: 2
ExtraRowGciBits: 0
ExtraRowAuthorBits: 0
TableStatus: Retrieved
HashMap: DEFAULT-HASHMAP-3840-2
-- Attributes --
p Int PRIMARY KEY DISTRIBUTION KEY AT=FIXED ST=MEMORY
c1 Blob(256,13948,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_26_1
c2 Blob(256,2000,0) NULL AT=MEDIUM_VAR ST=MEMORY BV=2 BT=NDB$BLOB_26_2
-- Indexes --
PRIMARY KEY(p) - UniqueHashIndex
PRIMARY(p) - OrderedIndex
NDBT_ProgramExit: 0 - OK
必须使用复制来更改列的 blob 部分大小ALTER TABLE
;此操作不能在线执行(请参阅
第 18.6.12 节,“在 NDB Cluster 中使用 ALTER TABLE 进行在线操作”)。