10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.3 mb
PDF (A4)- 41.4 mb
PDF (RPM)- 39.6 mb
HTML下载(TGZ)- 9.3 mb
HTML下载(Zip)- 9.3 mb
HTML下载(RPM)- 7.8 mb
手册页(TGZ)- 260.7 kb
手册页(Zip)- 372.0 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服务器使用的语法(算法=默认|原地|复制),并在别处有所描述。

请注意

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

的可变宽度列上添加和删除索引的操作NDB表是在线出现的。在线操作是非复制的;也就是说,它们不需要重新创建索引。它们不锁定NDB集群中其他API节点正在修改的表(但请参见NDB在线操作的局限性,在本节后面)。这样的操作不需要单用户模式进行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行受影响(1.73秒)记录:0重复:0警告:0

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

mysql> ALTER TABLE t1 > ADD COLUMN c3 INT COLUMN_FORMAT DYNAMIC STORAGE MEMORY, > ALGORITHM=INPLACE;查询确定,0行受影响(1.25秒)记录:0重复:0警告:0

,则此语句失败存储记忆选项省略:

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

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

mysql> ALTER ONLINE TABLE t1查询OK, 0 rows affected, 1 warning (1.17 sec) Records: 0 duplicate: 0 Warnings: 0 mysql> SHOW Warnings \G *************************** 1.查询OK, 0 rows affected, 1 warning (1.17 sec)命令行***************************级别:警告代码:1478消息:DYNAMIC column c4 with STORAGE DISK不支持,column将变成FIXED mysql> SHOW CREATE TABLE t1\G ***************************行  *************************** 表:t1创建表:创建表的t1 (c1的int(11)不是NULL, c2的varchar(30)默认为空,c3的int (11) / * !50606内存*/ /*!NULL, ' c4 ' int(11) /*!50606存储内存*/ NULL,主键(' c1 ')) /*!50606 TABLESPACE ts_1 STORAGE DISK */ ENGINE=ndbcluster DEFAULT CHARSET=latin1(0.03秒)
请注意

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

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

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动态选项,则自动使用动态列格式。

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

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

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

为在线ALTER TABLE上的操作NDB当在线添加表和固定格式列时,或者在线创建或删除索引时,它们将被转换为动态的,如下所示(重复创建表而且ALTER TABLE为了清晰起见,只列出了以下语句):

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

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

mysql> CREATE TABLE t3 (> c1 INT NOT NULL AUTO_INCREMENT PRIMARY KEY COLUMN_FORMAT FIXED >)mysql> ALTER TABLE t3 ADD COLUMN c2 INT, ALGORITHM=INPLACE;查询OK, 0行影响,1警告(0.78秒)记录:0重复:0警告:0 mysql>显示警告;*************************** 1。级别:警告代码:1478消息:将FIXED字段“c2”转换为DYNAMIC以启用在线添加set (0.00 sec)中的COLUMN 1行

列不能从固定动态通过重命名操作来格式化列。欲了解更多有关COLUMN_FORMAT,请参阅第13.1.20节“CREATE TABLE语句”

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

设置MAX_ROWS到0使用在线ALTER TABLE声明不被允许。你必须使用复印ALTER TABLE执行该操作。(错误# 21960004)