10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载 本手册节选

13.1.8 ALTER TABLE语句

ALTER TABLEtbl_namealter_option[,alter_option)……] [partition_optionsalter_option:{table_options|添加(列)col_namecolumn_definition(第一个|col_name|添加[列](col_namecolumn_definition| add{索引|键}[index_name] [index_type)(key_part,……)index_option)……| add{全文| spatial}[索引|键][index_name)(key_part,……)index_option)……| add [constraint]象征主键[index_type)(key_part,……)index_option)……| add [constraint]象征[索引|键][index_name] [index_type)(key_part,……)index_option)……| add [constraint]象征]]外键[index_name)(col_name,……)reference_definition| add check (expr| algorithm [=] {default | inplace | copy} | alter [column]col_name设置默认值文字| (expr| drop default} | change [column]old_col_namenew_col_namecolumn_definition(第一个|col_name| [default]字符集[=]charset_name(核对(=)collation_name|转换为字符集charset_name(核对collation_name| {disable | enable} keys | {discard | import} tablespace | drop [column]col_name删除索引|键index_name|删除主键|删除外键fk_symbol| force | lock [=] {default | none | shared | exclusive} | modify [column]col_namecolumn_definition(第一个|col_name订购col_name[,col_name)……|重命名索引|键old_index_namenew_index_name| rename[使|成为]new_tbl_name|{不带| with}验证}partition_optionspartition_optionpartition_option)……partition_option:{添加分区(partition_definition) |删除分区partition_names丢弃分区{partition_names|的所有表空间partition_names截断表空间partition_names| all} |合并分区数量|重组分区partition_names到(partition_definitions) |交换分区partition_name与表tbl_name[{with | without}验证]| analyze partition {partition_names| all} |检查分区{partition_names|优化分区{partition_names|重建分区{partition_names|修复分区{partition_names|删除分区升级分区key_partcol_name((长度[asc | desc]index_type:使用{btree | hash}index_option: {key_block_size [=]价值|index_type|与解析器parser_name|评论”字符串'}table_optionstable_option[[,]table_option)……table_option: {auto_increment [=]价值| AVG_ROW_LENGTH (=)价值| [default]字符集[=]charset_name| checksum [=] {0 | 1} | [default] collate [=]collation_name| comment [=] '字符串|压缩[=]{“ZLIB”|“LZ4”|“没有”}|连接(=)”connect_string' |{数据|索引}目录[=]'到目录的绝对路径“| DELAY_KEY_WRITE[=]{0} | 1 |加密(=){' Y ' | ' N '} |引擎(=)engine_name| insert_method [=] {no | first | last} | key_block_size [=]价值| MAX_ROWS (=)价值| MIN_ROWS (=)价值| pack_keys [=] {0 | 1 | default} | password [=] '字符串' | row_format [=] {default | dynamic | fixed | compressed | redundancy | compact} | stats_auto_recalc [=] {default | 0 | 1} | stats_persistent [=] {default | 0 | 1} | stats_sample_pages [=]价值|表空间tablespace_name[storage {disk | memory}] | union [=] (tbl_name[,tbl_name]…)}partition_options:(参见CREATE TABLE选项)

ALTER TABLE更改表的结构。例如,您可以添加或删除列,创建或删除索引,更改现有列的类型,或者重命名列或表本身。您还可以更改表使用的存储引擎或表注释等特征。

还有几个额外的方面ALTER TABLE声明,在本节的下列主题下描述:

表选项

table_options控件中使用的那种表选项创建表声明,如引擎AUTO_INCREMENTAVG_ROW_LENGTHMAX_ROWSROW_FORMAT,或表空间

有关所有表选项的描述,请参见第13.1.18节," CREATE TABLE语句".然而,ALTER TABLE忽略了数据目录而且索引目录当给出表选项时。ALTER TABLE只允许它们作为分区选项,并且,从MySQL 5.7.17开始,要求您有文件特权。

表选项的使用ALTER TABLE提供一种方便的方法来更改单个表的特性。例如:

  • 如果t1目前不是InnoDB表中,此语句将其存储引擎更改为InnoDB

    ALTER TABLE t1 ENGINE = InnoDB;
  • 改变InnoDB表使用压缩行存储格式:

    修改表t1 ROW_FORMAT = COMPRESSED;
  • 控件的加密功能InnoDB表的表空间:

    ALTER TABLE t1 ENCRYPTION='Y';ALTER TABLE t1 ENCRYPTION='N';

    必须安装和配置密匙环插件才能使用加密选择。有关更多信息,请参见第14.14节“InnoDB数据静止加密”

  • 重置当前自动递增值。

    修改表t1 AUTO_INCREMENT = 13;

    不能将计数器重置为小于或等于当前正在使用的值。对于这两个InnoDB而且MyISAM的值小于或等于当前的最大值AUTO_INCREMENT列时,该值重置为当前最大值AUTO_INCREMENT列值加1。

  • 更改默认的表字符集。

    ALTER TABLE t1 CHARACTER SET = utf8;

    另请参阅更改字符集

  • 添加(或更改)一个表注释:

    ALTER TABLE t1 COMMENT = '新表注释';
  • 使用ALTER TABLE表空间选择移动InnoDB表之间存在一般的表空间file-per-table表空间,系统表空间.看到使用ALTER TABLE在表空间之间移动表

    • ALTER TABLE……表空间操作总是会导致全表重新构建,即使表空间属性未从其以前的值更改。

    • ALTER TABLE……表空间语法不支持将表从临时表空间移动到持久表空间。

    • 数据目录子句,它由创建表……表空间,不支持ALTER TABLE……表空间,如果指定则忽略。

    • 的功能和限制的详细信息表空间选项,看到创建表

  • MySQL NDB Cluster 7.5.2及以上版本支持设置NDB_TABLE控件的表注释的一部分,用于控制表的分区平衡(片段计数类型)、从任意副本读取功能、完全复制或这些功能的任何组合的选项ALTER TABLE以与for相同的方式陈述创建表,如下例所示:

    ALTER TABLE t1 COMMENT = "NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE";

    请记住ALTER TABLE……发表评论…丢弃表的任何现有注释。看到设置NDB_TABLE选项,以获取更多信息和示例。

要验证表选项是否按预期更改,请使用显示创建表,或查询INFORMATION_SCHEMA。表表格

性能和空间要求

ALTER TABLE操作处理采用以下算法之一:

  • 复制:在原表的副本上执行操作,并将表数据逐行从原表复制到新表中。不允许并发DML。

  • 原地:操作避免复制表数据,但可能会在原位置重建表。在操作的准备和执行阶段,可以短暂地执行表上的独占元数据锁。通常,支持并发DML。

算法条款是可选的。如果算法子句省略,MySQL使用算法=原地对于存储引擎和ALTER TABLE支持它的从句。否则,算法=复制使用。

指定一个算法子句要求操作对支持它的子句和存储引擎使用指定的算法,否则将失败并出现错误。指定算法=违约是否等同于省略算法条款。

ALTER TABLE的操作复制算法等待正在修改表的其他操作完成。在对表副本应用更改之后,将复制数据,删除原始表,并将表副本重命名为原始表的名称。而ALTER TABLE操作执行时,原始表可被其他会话读取(稍后将说明例外情况)。之后开始对表的更新和写入ALTER TABLE操作开始被暂停,直到新表准备好,然后自动重定向到新表。表的临时副本是在原始表的数据库目录中创建的,除非它是重命名为将表移动到位于不同目录中的数据库的操作。

前面提到的例外情况是ALTER TABLE在准备安装表的新版本时,阻塞读取(而不仅仅是写入).frm文件,丢弃旧文件,并从表和表定义缓存中清除过时的表结构。此时,它必须获得一个独占锁。为此,它等待当前的读取器完成,并阻塞新的读写。

一个ALTER TABLE的操作。复制算法防止并发DML操作。仍然允许并发查询。也就是说,表复制操作总是至少包含的并发限制锁=共享(允许查询,但不允许DML)。控件支持的操作的并发性还可以进一步限制条款通过指定锁=独家,它阻止了DML和查询。有关更多信息,请参见并发控制

强迫使用复制一个算法ALTER TABLE操作,否则将不会使用它old_alter_table系统变量或指定算法=复制.如果有冲突old_alter_table设置和一个算法子句的值不是默认的,算法条款优先。

InnoDB表,一个ALTER TABLE的操作。复制对象中的表上的算法共享表空间可以增加表空间使用的空间量。这样的操作需要与表中的数据加上索引一样多的额外空间。对于驻留在共享表空间中的表,操作期间使用的额外空间不会释放回操作系统,就像驻留在共享表空间中的表一样file-per-table表空间。

有关在线DDL操作的空间需求的信息,请参见第14.13.3节“在线DDL空间要求”

ALTER TABLE的操作原地算法包括:

  • ALTER TABLEInnoDB在线DDL特性。看到第14.13.1节“在线DDL操作”

  • 重命名表。MySQL重命名与表对应的文件tbl_name不需要复印。(你也可以使用重命名表语句来重命名表。看到第13.1.33节," RENAME TABLE语句".)专门为重命名表授予的特权不会迁移到新名称。它们必须手动更改。

  • 只修改表元数据的操作。这些操作是即时的,因为服务器只修改表.frm文件,不碰表内容。仅元数据操作包括:

    • 重命名一个列。

    • 更改列的默认值(除NDB表)。

    • 修改对象的定义枚举类中添加新的枚举或集合成员来创建结束的有效成员值列表,只要数据类型的存储大小不变。例如,将成员添加到有8个成员的列将每个值所需的存储空间从1字节更改为2字节;这需要一个表副本。在列表中间添加成员会导致对现有成员重新编号,这需要表副本。

  • 重命名一个索引。

  • 添加或删除二级索引,forInnoDB而且NDB表。看到第14.13节“InnoDB和在线DDL”

  • NDB表,在变宽列上添加和删除索引的操作。这些操作是在线进行的,不需要表复制,也不需要在大部分时间阻塞并发DML操作。看到第21.5.11节“在NDB集群中使用ALTER TABLE进行在线操作”

ALTER TABLE升级MySQL 5.5时态列为5.6格式添加一列改变列修改列添加索引,操作。方法无法完成此转换原地算法,因为表必须重建,所以指定算法=原地在这些情况下会导致错误。指定算法=复制如果有必要的话)。

如果一个ALTER TABLE对用于对表进行分区的多列索引的操作关键更改列的顺序时,只能使用算法=复制

没有验证而且与验证条款是否影响ALTER TABLE执行原地操作虚拟生成列修改。看到第13.1.8.2节“修改表和生成的列”

NDB集群以前支持在线ALTER TABLE操作使用在线而且离线关键词。不再支持这些关键字;使用它们会导致语法错误。MySQL NDB Cluster 7.5(及更高版本)支持使用相同的在线操作算法=原地标准MySQL服务器使用的语法。NDB不支持在线更改表空间。看到第21.5.11节“在NDB集群中使用ALTER TABLE进行在线操作”,以查询更多资料。

ALTER TABLE丢弃……分区…表空间进口…分区…表空间不创建任何临时表或临时分区文件。

ALTER TABLE添加分区删除分区合并分区重建分区,或重组分区不创建临时表(除了与NDB表);但是,这些操作可以并且确实创建临时分区文件。

添加下降操作范围列表分区是即时操作或近似于即时操作。添加合并操作哈希关键分区在所有分区之间复制数据,除非线性散列线性关键使用;这实际上与创建新表相同,尽管添加合并操作是按分区执行的。重组操作只复制已更改的分区,不触及未更改的分区。

MyISAM表,您可以通过设置索引重新创建(更改过程中最慢的部分)来加速索引的重新创建myisam_sort_buffer_size系统变量设置为高值。

并发控制

ALTER TABLE支持它的操作,可以使用子句在修改表时控制表上的并发读写级别。为该子句指定非默认值使您能够在alter操作期间要求一定数量的并发访问或独占性,并在所请求的锁定程度不可用时停止操作。的参数条款是:

  • 锁=违约

    的最大并发级别算法条款(如有)和ALTER TABLEoperation:允许并发读写。如果不支持,则允许并发读。如果不是,强制独占访问。

  • 锁=没有

    如果支持,则允许并发读写。否则,将出现错误。

  • 锁=共享

    如果支持,允许并发读,但阻止写。即使给定的存储引擎支持并发写,写入也会被阻塞算法条款(如有)和ALTER TABLE操作。如果不支持并发读取,则会发生错误。

  • 锁=独家

    执行独占访问。即使给定的存储引擎支持并发读/写,也会这样做算法条款(如有)和ALTER TABLE操作。

添加和删除列

使用添加向表中添加新列下降删除现有列。下降col_name是对标准SQL的一个MySQL扩展。

若要在表行的特定位置添加列,请使用第一个col_name.默认是最后添加列。

如果表只包含一个列,则不能删除该列。如果您打算删除表,请使用删除表语句代替。

如果从表中删除列,则这些列也将从它们所属的任何索引中删除。如果删除组成索引的所有列,则索引也将被删除。

重命名、重定义和重排序列

改变修改,改变子句允许修改现有列的名称和定义。它们具有这些比较特征:

  • 改变

    • 可以重命名列并更改其定义,或者两者都可以。

    • 能力比修改,但牺牲了一些操作的便利性。改变如果不重命名列,则需要对其命名两次。

    • 第一个,可以重新排列列。

  • 修改

    • 可以更改列定义,但不能更改列名称。

    • 更方便比改变更改列定义而不重命名它。

    • 第一个,可以重新排列列。

  • 改变:仅用于修改列的默认值。

改变是对标准SQL的一个MySQL扩展。修改是一个MySQL扩展Oracle兼容。

若要更改列以更改其名称和定义,请使用改变,指定旧的、新的名称和新的定义。例如,重命名INT非空列从一个b改变它的定义,使用长整型数字数据类型,同时保留非空属性,这样做:

修改表t1的BIGINT NOT NULL;

若要更改列定义但不更改其名称,请使用改变修改.与改变,该语法需要两个列名,因此必须两次指定相同的名称以保持名称不变。例如,更改列的定义b这样做:

修改表t1 INT NOT NULL;

修改在不更改名称的情况下更改定义更方便,因为它只需要一次列名:

修改表t1 INT NOT NULL;

若要更改列名而不更改其定义,请使用改变.该语法需要列定义,因此要保持定义不变,必须重新指定列当前拥有的定义。例如,重命名INT非空列从b一个这样做:

ALTER TABLE t1 CHANGE b a INT NOT NULL;

用于列定义更改改变修改,定义必须包括数据类型和应应用于新列的所有属性,而不包括索引属性,例如主键独特的.在原始定义中存在但未为新定义指定的属性不会继续使用。假设有一列col1被定义为'我的列'然后按以下方式修改该列,只打算更改INT长整型数字

修改表t1的BIGINT值

该语句将数据类型从INT长整型数字,但它也会下降无符号默认的,评论属性。为了保留它们,语句必须显式包含它们:

ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';

用于数据类型更改改变修改, MySQL尝试将现有的列值尽可能地转换为新类型。

警告

这种转换可能导致数据的更改。例如,如果缩短字符串列,值可能会被截断。如果转换到新数据类型会导致数据丢失,为了防止操作成功,请在使用前启用严格的SQL模式ALTER TABLE(见第5.1.10节,“Server SQL模式”).

如果你使用改变修改如果要缩短列上存在索引的列,并且得到的列长度小于索引长度,MySQL会自动缩短索引。

对于重命名为改变, MySQL自动重命名这些引用到重命名的列:

  • 引用旧列的索引,包括索引和禁用的索引MyISAM索引。

  • 引用旧列的外键。

对于重命名为改变, MySQL不会自动重命名这些引用到重命名的列:

  • 生成引用重命名列的列和分区表达式。你必须使用改变重新定义这样的表达式ALTER TABLE语句作为重命名列的语句。

  • 引用重命名列的视图和存储程序。您必须手动更改这些对象的定义,以引用新的列名。

若要对表中的列重新排序,请使用第一个而且改变修改操作。

改变设置默认改变降低违约分别为列指定新的默认值或删除旧的默认值。如果旧的默认值被删除,列可以,新的默认值为.如果列不能, MySQL会指定一个默认值第11.6节“数据类型默认值”

主键和索引

删除主键下降的主键.如果没有主键,则会发生错误。有关主键的性能特征的信息,特别是InnoDB表,请参阅第8.3.2节“主键优化”

如果你添加一个唯一索引主键MySQL将它存储在任何非唯一索引之前,以便尽可能早地检测到重复的键。

指数下降删除索引。这是对标准SQL的MySQL扩展。看到第13.1.25节,“DROP INDEX语句”.要确定索引名称,请使用显示指数从tbl_name

有些存储引擎允许在创建索引时指定索引类型。的语法index_type说明符是使用type_name.对象的细节使用,请参阅第13.1.14节“CREATE INDEX语句”.首选位置是列列表之后。您应该期望在将来的MySQL版本中删除列列表之前支持使用该选项。

index_option值指定索引的其他选项。有关允许的详情index_option值,请参阅第13.1.14节“CREATE INDEX语句”

重命名索引old_index_namenew_index_name重命名一个索引。这是对标准SQL的MySQL扩展。表的内容保持不变。old_index_name必须是表中没有被相同索引删除的现有索引的名称ALTER TABLE声明。new_index_name是新的索引名称,在应用更改后,该名称不能复制结果表中的索引名称。两个索引名都不能主要的

如果你使用ALTER TABLE在一个MyISAM表中,所有非唯一索引都在单独的批处理中创建(如修理表).这应该使ALTER TABLE当你有很多索引时,速度会更快。

MyISAM表、键更新可以显式控制。使用ALTER TABLE……禁用的钥匙告诉MySQL停止更新非唯一索引。然后使用ALTER TABLE……启用钥匙重新创建丢失的索引。MyISAM使用一种比逐个插入键要快得多的特殊算法来实现这一点,因此在执行批量插入操作之前禁用键应该会带来相当大的加速。使用ALTER TABLE……禁用的钥匙要求指数除了前面提到的特权之外的其他特权。

当禁用非惟一索引时,对于诸如选择而且解释否则就会使用它们。

后一个ALTER TABLE语句,则可能需要运行该语句分析表更新索引基数信息。看到第13.7.5.22节,“SHOW INDEX语句”

外键和其他约束

外键而且参考文献子句由InnoDB而且NDB存储引擎,实现添加(约束(象征]]外键[index_name)(…)参考文献(…).看到第1.7.3.2节,“外键约束”.对于其他存储引擎,将解析子句,但忽略该子句。

检查Constraint子句会被所有存储引擎解析,但会被忽略。看到第13.1.18节," CREATE TABLE语句".接受但忽略语法子句的原因是为了兼容性,以便更容易地从其他SQL服务器移植代码,并运行使用引用创建表的应用程序。看到第1.7.2节“MySQL与标准SQL的区别”

ALTER TABLE,不像创建表添加外键忽略了index_name如果给出并使用自动生成的外键名。作为一种变通方法,请包括约束子句来指定外键名:

添加约束的名字外键(....)…
重要的

MySQL静默忽略内联参考文献规范,其中引用被定义为列规范的一部分。MySQL只接受参考文献子句定义为单独的一部分外键规范。

请注意

分区InnoDB表不支持外键。此限制不适用于NDB表,包括显式分区由(线性)的关键.有关更多信息,请参见第22.6.2节,“与存储引擎相关的分区限制”

MySQL服务器和NDB集群都支持使用ALTER TABLE删除外键。

ALTER TABLEtbl_name删除外键fk_symbol

在同一空间中添加和删除外键ALTER TABLE语句的支持ALTER TABLE……算法=原地但不是ALTER TABLE……算法=复制

服务器禁止对可能导致引用完整性丢失的外键列的更改。一个变通方法就是使用ALTER TABLE……删除外键在更改列定义和ALTER TABLE……添加外键之后。禁止更改的例子包括:

  • 对可能不安全的外键列的数据类型的更改。例如,更改VARCHAR (20)VARCHAR (30)是允许的,但是更改为VARCHAR (1024)不是因为这会改变存储单个值所需的长度字节数。

  • 改变一个非空在非严格模式下禁止转换值默认为非值,在引用的表中没有相应的值。该操作在严格模式下是允许的,但是如果需要任何这样的转换,则返回一个错误。

ALTER TABLEtbl_name重命名new_tbl_name更改内部生成的以字符串开头的外键约束名称和用户定义的外键约束名称tbl_name_ibfk_以反映新的表名。InnoDB解释以字符串开头的外键约束名称tbl_name_ibfk_作为内部生成的名称。

更改字符集

更改表默认字符集和所有字符列(字符VARCHAR文本)到一个新的字符集,使用如下语句:

ALTER TABLEtbl_name转换为字符集charset_name

该语句还更改了所有字符列的排序规则。如果指定no核对子句指示要使用哪种排序规则,则该语句对字符集使用默认排序规则。如果此排序规则不适合预期的表使用(例如,如果它将从区分大小写的排序规则更改为不区分大小写的排序规则),则显式指定一个排序规则。

对于数据类型为的列VARCHAR或者其中一个文本类型,转换为字符集根据需要更改数据类型,以确保新列足够长,能够存储与原始列一样多的字符。例如,一个文本列有两个长度字节,用于存储列中值的字节长度,最大值为65,535。对于一个latin1文本列,每个字符需要一个字节,因此列最多可以存储65,535个字符。如果将列转换为use utf8,每个字符可能需要3个字节,最大可能的长度为3 × 65,535 = 196,605字节。这个长度不适合文本列的长度字节,因此MySQL将数据类型转换为简单,这是长度字节可以记录196,605值的最小字符串类型。同样,一个VARCHAR列可以转换为简单

为避免更改刚才描述的类型的数据类型,请不要使用转换为字符集.相反,使用修改更改单个列。例如:

修改latin1_text_col文本字符集utf8;修改表VARCHAR表)字符集utf8;

如果您指定转换为字符集二进制,字符VARCHAR,文本列被转换为相应的二进制字符串类型(二进制VARBINARY).这意味着列不再有字符集和后续字符集转换为操作不适用于它们。

如果charset_name默认的在一个转换为字符集方法命名的字符集character_set_database使用系统变量。

警告

转换为操作在原始字符集和命名字符集之间转换列值。这是如果您在一个字符集中有一个列(比如latin1),但是存储的值实际上使用了其他一些不兼容的字符集(比如use utf8).在这种情况下,您必须对每个这样的列执行以下操作:

ALTER TABLE t1 CHANGE c1 c1 BLOBALTER TABLE t1 CHANGE c1 TEXT CHARACTER SET utf8

这样做的原因是,当您转换到或从时,没有转换列。

只更改默认的表的字符集,使用以下语句:

ALTER TABLEtbl_name默认字符集charset_name

这个词默认的是可选的。默认字符集是如果您没有为以后添加到表中的列指定字符集(例如,与ALTER TABLE……添加一列).

foreign_key_checks系统变量已启用,这是默认设置,不允许在包含外键约束中使用的字符串列的表上进行字符集转换。解决方法是禁用foreign_key_checks在执行字符集转换之前。在重新启用外键约束之前,必须对涉及到的两个表执行转换foreign_key_checks.如果你重新启用foreign_key_checks在转换了其中一个表之后,一个在级联删除在级联更新操作可能会损坏引用表中的数据,因为在这些操作期间发生了隐式转换(Bug #45290, Bug #74816)。

丢弃和导入InnoDB表空间

一个InnoDB表自己创建file-per-table表空间可以从备份或从另一个MySQL服务器实例导入丢弃TABLEPACE而且导入表空间条款。看到第14.6.1.3节“导入InnoDB表”

MyISAM表的行顺序

命令允许您以特定的顺序创建新表。当您知道大部分时间都是按一定顺序查询行时,此选项主要是有用的。通过在对表进行重大更改之后使用此选项,您可能能够获得更高的性能。在某些情况下,如果表按照您稍后希望对其排序的列排序,那么对MySQL来说排序可能会更容易。

请注意

在插入和删除之后,表不会保持指定的顺序。

命令语法允许指定一个或多个列名进行排序,每个列名后面可选地跟随ASCDESC分别表示升序或降序排序。默认为升序。只允许列名作为排序标准;随意表达是不允许的。这一条款应放在其他条款的最后。

命令没有意义吗InnoDB表,因为InnoDB的顺序对表行进行排序聚集索引

在分区表上使用时,ALTER TABLE……命令只对每个分区中的行排序。

分区选项

partition_options表示可与已分区表一起用于重新分区、添加、删除、丢弃、导入、合并和分割分区以及执行分区维护的选项。

这是可能的ALTER TABLE语句来包含分区的删除分区子句添加到其他修改规范中,但是分区的删除分区子句必须在任何其他规格之后指定。的添加分区删除分区丢弃分区进口分区合并分区重组分区交换分区分析分区检查分区,修复分区选项不能与其他alter规范组合在一起ALTER TABLE,因为刚刚列出的选项作用于单独的分区。

有关分区选项的更多信息,请参见第13.1.18节," CREATE TABLE语句",第13.1.8.1节“ALTER TABLE Partition Operations”.的信息和示例ALTER TABLE……交换分区语句,看到第22.3.3节“与表交换分区和子分区”

MySQL 5.7.6之前是分区的InnoDB表使用泛型ha_partition使用的分区处理程序MyISAM和其他不提供自己分区处理程序的存储引擎;在MySQL 5.7.6及以后版本中,这样的表是使用InnoDB存储引擎自己的(或本地的)分区处理程序。从MySQL 5.7.9开始,您可以升级InnoDB表是在MySQL 5.7.6或更早版本中创建的(即使用ha_partition)InnoDB使用本机分区处理程序ALTER TABLE……升级分区.(Bug #76734, Bug #20727344ALTER TABLE语法不接受任何其他选项,一次只能在单个表上使用。你也可以用mysql_upgrade在MySQL 5.7.9或更高版本升级旧分区InnoDB表到本地分区处理程序。