10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国Ltr)- 41.2 mb
PDF (A4)- 41.3 mb
PDF (RPM)- 39.5 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.3 mb
HTML下载(RPM)- 7.8 mb
手册(TGZ)- 260.6 kb
手册(Zip)- 371.8 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

MySQL 8.0参考手册/.../ 在NDB集群中使用ALTER TABLE进行在线操作

23.5.11 NDB集群使用ALTER TABLE在线操作

MySQL NDB Cluster 8.0支持使用标准在线修改表模式ALTER TABLEMySQL Server (算法=默认|原地|复制),并在其他地方描述。

请注意

NDB Cluster的一些旧版本使用了特定于的语法NDB为在线ALTER TABLE操作。该语法已被删除。

的可变宽度列上添加和删除索引的操作NDB表是在线的。在线操作是非复制的;也就是说,它们不需要重新创建索引。它们不锁定正在被修改的表,不让NDB集群中的其他API节点访问新开发银行在线运营的局限性,在本节后面)。这样的操作不需要单用户模式NDB在具有多个API节点的NDB集群中所做的表更改;事务可以在在线DDL操作期间不间断地继续进行。

算法=原地可以用来在线执行吗添加一列添加索引(包括创建索引语句),指数下降上的操作NDB表。在线重命名NDB还支持表。

以前,NDB不能在线重命名表;这个限制在NDB 8.0.18中被删除了。

目前不能将基于磁盘的列添加到NDB在线表格。这意味着,如果您希望将内存中的列添加到NDB使用表级的表存储磁盘选项,则必须显式声明新列使用基于内存的存储。例如,假设您已经创建了表空间壹空间-假设你创建了一个表t1如下:

mysql> CREATE TABLE t1 (> c1 INT NOT NULL PRIMARY KEY, > c2 VARCHAR(30) >) > TABLESPACE ts1 STORAGE DISK > ENGINE NDB;查询OK, 0 rows affected (1.73 sec) Records: 0 duplicate: 0 warning: 0

您可以在线向此表添加一个新的内存列,如下所示:

mysql> ALTER TABLE t1 > ADD COLUMN c3 INT COLUMN_FORMAT动态存储内存,>算法=INPLACE;查询OK, 0行影响(1.25秒)记录:0重复项:0警告:0

如果存储记忆选项被省略:

mysql> ALTER TABLE t1 > ADD COLUMN c4 INT COLUMN_FORMAT DYNAMIC, > ALGORITHM=INPLACE;错误1846 (0A000):算法=INPLACE不支持。原因:不支持在线添加列或添加/重组分区。试算法=复制。

如果您省略COLUMN_FORMAT动态选项,则自动使用动态列格式,但会发出警告,如下所示:

将表t1的列添加为c4 INT STORAGE MEMORY;查询OK, 0 rows affected, 1 warning (1.17 sec) Records: 0 duplicate: 0 Warnings: 0 mysql> SHOW Warnings \G *************************** 1。row ***************************级别:警告代码:1478消息:DYNAMIC column c4 with STORAGE DISK is not supported, column will become FIXED mysql> SHOW CREATE TABLE t1\G *************************** 1.执行以下命令。行  *************************** 表:t1创建表:创建表的t1 (c1的int(11)不是NULL, c2的varchar(30)默认为空,c3的int (11) / * !50606内存*/ /*!50606 COLUMN_FORMAT DYNAMIC */ DEFAULT NULL, ' c4 ' int(11) /*!50606存储内存*/ DEFAULT NULL,主键(' c1 ')) /*!50606表空间ts_1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1
请注意

存储而且COLUMN_FORMAT关键字仅在NDB集群中支持;在任何其他版本的MySQL中,尝试使用这些关键字中的任何一个创建表ALTER TABLE语句会导致错误。

也可以使用语句修改表…重组分区,算法= inplace没有partition_names到(partition_definitions选项NDB表。这可以用于在在线添加到集群的新数据节点之间重新分配NDB集群数据。这并执行任何碎片整理,这需要一个优化表或空ALTER TABLE声明。有关更多信息,请参见第23.5.7节“在线增加NDB集群数据节点”

新开发银行在线运营的局限性

在线删除列不支持操作。

在线ALTER TABLE创建索引,或指数下降添加列或添加或删除索引的语句受以下限制:

  • 给定的在线ALTER TABLE只能用一种吗添加一列添加索引,或指数下降.可以在一条语句中在线添加一个或多个列;在一条语句中只能在线创建或删除一个索引。

  • 正在被修改的表对API节点不锁定,但对在线的API节点除外ALTER TABLE添加一列添加索引,或指数下降操作(或创建索引指数下降语句)。对象上发起的任何其他操作都将锁定该表相同API节点,同时执行在线操作。

  • 要修改的表必须有显式的主键;创建的隐藏主键NDB存储引擎不能满足此目的。

  • 表使用的存储引擎不支持在线修改。

  • 表使用的表空间不能在线修改。从NDB 8.0.21开始,像这样的语句ALTER TABLEndb_table...算法=原地,表空间=new_tablespace是特别不允许的。(Bug #99269, Bug #31180526)

  • 当使用NDB集群磁盘数据表时,不可能更改存储类型(磁盘内存)。这意味着,当以在线执行操作的方式添加或删除索引,并且希望更改列的存储类型时,必须使用算法=复制在添加或删除索引的语句中。

要在线添加的列不能使用文本类型,且必须满足以下条件:

  • 列必须是动态的;也就是说,必须能够使用COLUMN_FORMAT动态.如果您省略COLUMN_FORMAT动态选项,则自动使用动态列格式。

  • 柱子必须允许值,没有任何显式的默认值.在线添加的列将自动创建为默认为空,如下图所示:

    CREATE TABLE t2 (> c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY >)查询OK, 0 rows affected (1.44 sec) mysql> ALTER TABLE t2 > ADD COLUMN c2 INT, > ADD COLUMN c3 INT, > ALGORITHM=INPLACE;查询好,0行影响,2警告(0.93秒)mysql >显示创建表t1 \ G  *************************** 1。row *************************** Table: t1 Create Table: Create Table ' t2 ' (' c1 ' int(11) NOT NULL AUTO_INCREMENT, ' c2 ' int(11) DEFAULT NULL, ' c3 ' int(11) DEFAULT NULL, PRIMARY KEY (' c1 ')) ENGINE=ndbcluster DEFAULT CHARSET=latin1 1 row in set (0.00 sec)
  • 必须将列添加到任何现有列之后。方法在任何现有列之前在线添加列或使用第一个关键字,语句将失败并出现错误。

  • 现有的表列不能在线重新排序。

为在线ALTER TABLE上的操作NDB表、固定格式列在在线添加时,或在线创建或删除索引时,将转换为动态的,如这里所示(重复创建表而且ALTER TABLE为了清晰起见,这里只显示了语句):

CREATE TABLE t2 (> c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY >)查询OK, 0 rows affected (1.44 sec) mysql> ALTER TABLE t2 > ADD COLUMN c2 INT, > ADD COLUMN c3 INT, > ALGORITHM=INPLACE;查询OK, 0 rows affected, 2 warnings (0.93 sec) mysql> SHOW warnings;*************************** 1。行  *************************** 级别:警告代码:1478信息:转换固定字段的c2动态启用在线添加列  *************************** 2。行***************************级别:警告代码:1478消息:将固定字段“c3”转换为动态,以启用在线添加列2行在set (0.00 sec)

只有在线添加的列必须是动态的。现有的列不需要;这包括表的主键,也可以是固定,如下所示:

mysql> CREATE TABLE 3 (> c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY COLUMN_FORMAT FIXED >)查询OK, 0 rows affected (2.10 sec) mysql> ALTER TABLE t3 ADD COLUMN c2 INT, ALGORITHM=INPLACE;查询OK, 0 rows affected, 1 warning (0.78 sec) Records: 0 duplicate: 0 Warnings: 0 mysql> SHOW Warnings;*************************** 1。行***************************级别:警告代码:1478消息:将固定字段“c2”转换为动态,以启用在线添加列1行在set (0.00 sec)

列不进行转换固定动态通过重命名操作来格式化列。有关COLUMN_FORMAT,请参阅第13.1.20节," CREATE TABLE语句"

关键约束,忽略中支持关键字ALTER TABLE语句的使用算法=原地

设置MAX_ROWS到0使用在线ALTER TABLE语句被禁止。你必须使用复印ALTER TABLE执行该操作。(错误# 21960004)