在线DDL操作
本节以下主题下提供了DDL操作的在线支持详细信息,语法示例和使用说明。
- 索引操作
- 主键操作
- 列操作
- 生成的列操作
- 外键操作
- 表操作
- 表空间操作
- 分区操作
索引操作
下表概述了对索引操作的联机DDL支持。星号表示其他信息,异常或依赖项。有关详细信息,请参见语法和用法说明。
对索引操作的在线DDL支持
运作方式 | 瞬间 | 到位 | 重建表 | 允许并发DML | 仅修改元数据 |
---|---|---|---|---|---|
创建或添加二级索引 | 没有 | 是 | 没有 | 是 | 没有 |
删除索引 | 没有 | 是 | 没有 | 是 | 是 |
重命名索引 | 没有 | 是 | 没有 | 是 | 是 |
添加FULLTEXT 索引 | 没有 | 是* | 没有* | 没有 | 没有 |
添加SPATIAL 索引 | 没有 | 是 | 没有 | 没有 | 没有 |
更改索引类型 | 是 | 是 | 没有 | 是 | 是 |
语法和用法说明
创建或添加二级索引
CREATE INDEX nameON table (col_list);ALTER TABLE tbl_nameADD INDEX name (col_list);创建索引时,该表仍可用于读取和写入操作。该
CREATE INDEX
语句仅在访问表的所有事务完成后才完成,因此索引的初始状态反映了表的最新内容。在线DDL对添加二级索引的支持意味着您通常可以通过以下方式来创建和加载表及相关索引:创建不具有二级索引的表,然后在数据加载后添加二级索引,从而加快了创建和加载表及关联索引的总体过程。
在
CREATE INDEX
orALTER TABLE
语句完成执行时,新创建的二级索引仅包含表中已提交的数据。它不包含任何未提交的值,值的旧版本或标记为要删除但尚未从旧索引中删除的值。一些因素会影响此操作的性能,空间使用率和语义。有关详细信息,请参见“在线DDL限制”。
删除索引
DROP INDEX nameON table;ALTER TABLE tbl_nameDROP INDEX name;删除索引时,该表仍可用于读取和写入操作。该
DROP INDEX
语句仅在访问表的所有事务完成后才完成,因此索引的初始状态反映了表的最新内容。重命名索引
ALTER TABLE tbl_nameRENAME INDEX old_index_nameTO new_index_name,ALGORITHM =INPLACE,LOCK =NONE ;添加
FULLTEXT
索引CREATE FULLTEXT INDEX nameON table (column);FULLTEXT
如果没有用户定义的FTS_DOC_ID
列,则添加第一个索引将重建表。FULLTEXT
可以添加其他索引而不重建表。添加
SPATIAL
索引CREATE TABLE geom (gGEOMETRY NOT NULL);ALTER TABLE geomADD SPATIAL INDEX (g),ALGORITHM =INPLACE,LOCK =SHARED;FULLTEXT
如果没有用户定义的FTS_DOC_ID
列,则添加第一个索引将重建表。FULLTEXT
可以添加其他索引而不重建表。更改索引类型(
USING{BTREE | HASH}
)ALTER TABLE tbl_nameDROP INDEX i1,ADD INDEX i1(key_part,...)USING BTREE ,ALGORITHM =INSTANT;
主键操作
下表概述了对主键操作的联机DDL支持。星号表示其他信息,异常或依赖项。请参阅语法和用法说明。
对主键操作的在线DDL支持
运作方式 | 瞬间 | 到位 | 重建表 | 允许并发DML | 仅修改元数据 |
---|---|---|---|---|---|
添加主键 | 没有 | 是* | 是* | 是 | 没有 |
删除主键 | 没有 | 没有 | 是 | 没有 | 没有 |
删除主键并添加另一个 | 没有 | 是 | 是 | 是 | 没有 |
语法和用法说明
添加主键
ALTER TABLE tbl_nameADD PRIMARY KEY (column),ALGORITHM =INPLACE,LOCK =NONE ;重建表到位。数据被大量重组,使其成为昂贵的操作。
ALGORITHM=INPLACE
如果必须将列转换为,则在某些情况下是不允许的NOT NULL
。重组聚集索引始终需要复制表数据。因此,最好在创建表时定义主键,而不要在
ALTER TABLE ... ADD PRIMARY KEY
以后发布。创建
UNIQUE
或PRIMARY KEY
索引时,MySQL必须做一些额外的工作。对于UNIQUE
索引,MySQL检查表是否不包含键的重复值。对于PRIMARY KEY
索引,MySQL还检查是否所有PRIMARY KEY
列都不包含NULL
。当您使用
ALGORITHM=COPY
子句添加主键时,MySQL会将NULL
关联列中的值转换为默认值:0表示数字,空字符串表示基于字符的列和BLOB,而0000-00-00则注册00:00:00DATETIME
。这是Oracle建议您不要依赖的非标准行为。ALGORITHM=INPLACE
仅当SQL_MODE
设置包含strict_trans_tables
或strict_all_tables
标志时,才允许使用主键。当SQL_MODE
设置为严格时,ALGORITHM=INPLACE
是允许的,但是如果请求的主键列包含NULL
价值观。该ALGORITHM=INPLACE
行为更符合标准。如果创建的表没有主键,
InnoDB
则为您选择一个,它可以是列上UNIQUE
定义的第一个键,也可以是NOT NULL
系统生成的键。为避免不确定性和额外隐藏列的潜在空间需求,请将该PRIMARY KEY
子句指定为语句的一部分CREATE TABLE
。MySQL通过将现有数据从原始表复制到具有所需索引结构的临时表中来创建新的聚集索引。将数据完全复制到临时表后,原始表将使用其他临时表名重命名。包含新的聚集索引的临时表将用原始表的名称重命名,然后从数据库中删除原始表。
适用于二级索引操作的联机性能增强不适用于主键索引。InnoDB表的行存储在基于主键组织的聚集索引中,形成一些数据库系统称为“索引组织表”的表。由于表结构与主键紧密相关,因此重新定义主键仍然需要复制数据。
当对主键进行的操作使用时
ALGORITHM=INPLACE
,即使仍然复制数据,它也比使用效率更高,ALGORITHM=COPY
因为:- 不需要撤消日志记录或相关的重做日志记录
ALGORITHM=INPLACE
。这些操作会增加使用的DDL语句的开销ALGORITHM=COPY
。 - 二级索引条目已预先排序,因此可以按顺序加载。
- 不使用更改缓冲区,因为辅助索引中没有随机访问插入。
- 不需要撤消日志记录或相关的重做日志记录
删除主键
ALTER TABLE tbl_nameDROP PRIMARY KEY ,ALGORITHM =COPY;仅
ALGORITHM=COPY
支持删除主键而不在同一ALTER TABLE
语句中添加新的主键。删除主键并添加另一个
ALTER TABLE tbl_nameDROP PRIMARY KEY ,ADD PRIMARY KEY (column),ALGORITHM =INPLACE,LOCK =NONE ;数据被大量重组,使其成为昂贵的操作。
列操作
下表概述了对列操作的在线DDL支持。星号表示其他信息,异常或依赖项。有关详细信息,请参见语法和用法说明。
对列操作的在线DDL支持
运作方式 | 瞬间 | 到位 | 重建表 | 允许并发DML | 仅修改元数据 |
---|---|---|---|---|---|
添加列 | 是* | 是 | 没有* | 是* | 没有 |
删除列 | 没有 | 是 | 是 | 是 | 没有 |
重命名列 | 没有 | 是 | 没有 | 是* | 是 |
重新排序栏 | 没有 | 是 | 是 | 是 | 没有 |
设置列默认值 | 是 | 是 | 没有 | 是 | 是 |
更改列数据类型 | 没有 | 没有 | 是 | 没有 | 没有 |
扩展VARCHAR 列大小 | 没有 | 是 | 没有 | 是 | 是 |
删除列默认值 | 是 | 是 | 没有 | 是 | 是 |
更改自动增量值 | 没有 | 是 | 没有 | 是 | 没有* |
制作专栏NULL | 没有 | 是 | 是* | 是 | 没有 |
制作专栏NOT NULL | 没有 | 是* | 是* | 是 | 没有 |
修改ENUM 或SET 列的定义 | 是 | 是 | 没有 | 是 | 是 |
语法和用法说明
添加列
ALTER TABLE tbl_nameADD COLUMN column_name column_definition,ALGORITHM =INSTANT;使用该
INSTANT
算法添加列时,存在以下限制:- 添加列不能在同一语句中与
ALTER TABLE
不支持的其他操作组合使用ALGORITHM=INSTANT
。 - 只能将一列添加为表的最后一列。不支持将列添加到其他列中的任何其他位置。
- 列不能添加到使用的表中
ROW_FORMAT=COMPRESSED
。 - 列不能添加到包含
FULLTEXT
索引的表中。 - 列不能添加到临时表。临时表仅支持
ALGORITHM=COPY
。 - 不能将列添加到驻留在数据字典表空间中的表中。
- 添加列时不评估行大小限制。但是,在插入和更新表中的行的DML操作期间会检查行大小限制。
可以在同一
ALTER TABLE
语句中添加多个列。例如:ALTER TABLE t1ADD COLUMN c2 INT,ADD COLUMN c3 INT,ALGORITHM =INSTANT;INFORMATION_SCHEMA.INNODB_TABLES
并INFORMATION_SCHEMA.INNODB_COLUMNS
提供即时添加列的元数据。INFORMATION_SCHEMA.INNODB_TABLES.INSTANT_COLS
显示添加第一个即时列之前表中的列数。INFORMATION_SCHEMA.INNODB_COLUMNS.HAS_DEFAULT
并DEFAULT_VALUE
提供有关立即添加的列的默认值的元数据。添加自动增量列时不允许并发DML 。数据被大量重组,使其成为昂贵的操作。至少
ALGORITHM=INPLACE, LOCK=SHARED
是必需的。如果
ALGORITHM=INPLACE
用于添加列,则重建表。- 添加列不能在同一语句中与
删除列
ALTER TABLE tbl_nameDROP COLUMN column_name,ALGORITHM =INPLACE,LOCK =NONE ;数据被大量重组,使其成为昂贵的操作。
重命名列
ALTER TABLE tblCHANGE old_col_name new_col_name data_type,ALGORITHM =INPLACE,LOCK =NONE ;要允许并发DML,请保持相同的数据类型,仅更改列名。
当您保持相同的数据类型和
[NOT] NULL
属性时,仅更改列名,即可始终在线执行该操作。您还可以重命名属于外键约束的列。外键定义会自动更新为使用新的列名。重命名参与外键的列仅适用于
ALGORITHM=INPLACE
。如果您使用该ALGORITHM=COPY
子句,或者某些其他条件导致该命令在ALGORITHM=COPY
后台使用,则该ALTER TABLE
语句将失败。ALGORITHM=INPLACE
不支持重命名生成的列。重新排序栏
要重新排序列,请使用
FIRST
或AFTER
在CHANGE
或MODIFY
操作。ALTER TABLE tbl_nameMODIFY COLUMN col_name column_definitionFIRST ,ALGORITHM =INPLACE,LOCK =NONE ;数据被大量重组,使其成为昂贵的操作。
更改列数据类型
ALTER TABLE tbl_nameCHANGE c1 c1 BIGINT,ALGORITHM =COPY;仅支持通过更改列数据类型
ALGORITHM=COPY
。扩展
VARCHAR
列大小ALTER TABLE tbl_nameCHANGE COLUMN c1 c1 VARCHAR(255),ALGORITHM =INPLACE,LOCK =NONE ;VARCHAR
列所需的长度字节数必须保持相同。对于VARCHAR
大小为0到255个字节的列,需要一个长度的字节来编码该值。对于VARCHAR
大小为256字节或更大的列,需要两个长度的字节。结果,就地ALTER TABLE
仅支持将VARCHAR
列大小从0 增大到255字节,或从256字节增大到更大的大小。就地ALTER TABLE
不支持增加VARCHAR
列,从小于256个字节到等于或大于256个字节的大小。在这种情况下,所需的长度字节数从1更改为2,这仅由表副本(ALGORITHM=COPY
)支持。例如,尝试VARCHAR
使用就地ALTER TABLE
将单字节字符集的列大小从VARCHAR(255)更改为VARCHAR(256)会返回此错误:ALTER TABLE tbl_nameALGORITHM =INPLACE,CHANGE COLUMN c1 c1 VARCHAR(256); ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY.注意
一个的字节长度
VARCHAR
列是依赖于字符集的字节长度。减少
VARCHAR
使用就地尺寸ALTER TABLE
不被支持。减小VARCHAR
大小需要表副本(ALGORITHM=COPY
)。设置列默认值
ALTER TABLE tbl_nameALTER COLUMN colSET DEFAULT literal,ALGORITHM =INSTANT;仅修改表元数据。默认列值存储在数据字典中。
删除列默认值
ALTER TABLE tblALTER COLUMN colDROP DEFAULT ,ALGORITHM =INSTANT;更改自动增量值
ALTER TABLE tableAUTO_INCREMENT =next_value,ALGORITHM =INPLACE,LOCK =NONE ;修改存储在内存中的值,而不是数据文件。
在使用复制或分片的分布式系统中,有时会将表的自动增量计数器重置为特定值。插入表的下一行将为其自动增量列使用指定的值。您还可以在数据仓库环境中使用此技术,在该环境中,您定期清空所有表并重新加载它们,然后从1重新开始自动递增序列。
制作专栏
NULL
ALTER TABLE tbl_nameMODIFY COLUMN column_name data_type NULL,ALGORITHM =INPLACE,LOCK =NONE ;重建表到位。数据被大量重组,使其成为昂贵的操作。
制作专栏
NOT NULL
ALTER TABLE tbl_nameMODIFY COLUMN column_name data_type NOT NULL,ALGORITHM =INPLACE,LOCK =NONE ;重建表到位。
STRICT_ALL_TABLES
或STRICT_TRANS_TABLES
SQL_MODE
操作成功所需的。如果该列包含NULL值,则操作失败。服务器禁止更改外键列,这可能会导致丢失引用完整性。请参见“ ALTER TABLE语句”。数据被大量重组,使其成为昂贵的操作。修改
ENUM
或SET
列的定义CREATE TABLE t1 (c1 ENUM('a', 'b', 'c'));ALTER TABLE t1MODIFY COLUMN c1 ENUM('a', 'b', 'c', 'd'),ALGORITHM =INSTANT;只要不改变数据类型的存储大小,就可以立即或就地执行通过在有效成员值列表的末尾添加新的枚举或设置成员来修改
ENUM
or或SET
column 的定义的操作。例如,将成员添加到具有8个成员的列中,将每个值所需的存储从1字节更改为2字节;这需要一个表副本。在列表中间添加成员会导致对现有成员重新编号,这需要表副本。SET
生成的列操作
下表概述了对生成的列操作的在线DDL支持。有关详细信息,请参见语法和用法说明。
对生成的列操作的在线DDL支持
运作方式 | 瞬间 | 到位 | 重建表 | 允许并发DML | 仅修改元数据 |
---|---|---|---|---|---|
添加STORED 列 | 没有 | 没有 | 是 | 没有 | 没有 |
修改STORED 列顺序 | 没有 | 没有 | 是 | 没有 | 没有 |
删除STORED 列 | 没有 | 是 | 是 | 是 | 没有 |
添加VIRTUAL 列 | 是 | 是 | 没有 | 是 | 是 |
修改VIRTUAL 列顺序 | 没有 | 没有 | 是 | 没有 | 没有 |
删除VIRTUAL 列 | 是 | 是 | 没有 | 是 | 是 |
语法和用法说明
添加
STORED
列ALTER TABLE t1ADD COLUMN (c2 INTGENERATED ALWAYS AS (c1 + 1)STORED ),ALGORITHM =COPY;ADD COLUMN
不是对存储的列的就地操作(无需使用临时表即可完成),因为表达式必须由服务器评估。修改
STORED
列顺序ALTER TABLE t1MODIFY COLUMN c2 INTGENERATED ALWAYS AS (c1 + 1)STORED FIRST ,ALGORITHM =COPY;重建表到位。
删除
STORED
列ALTER TABLE t1DROP COLUMN c2,ALGORITHM =INPLACE,LOCK =NONE ;重建表到位。
添加
VIRTUAL
列ALTER TABLE t1ADD COLUMN (c2 INTGENERATED ALWAYS AS (c1 + 1)VIRTUAL ),ALGORITHM =INSTANT;虚拟列的添加可以立即执行,也可以在非分区表中执行。
VIRTUAL
对于分区表,添加a 不是就地操作。修改
VIRTUAL
列顺序ALTER TABLE t1MODIFY COLUMN c2 INTGENERATED ALWAYS AS (c1 + 1)VIRTUAL FIRST ,ALGORITHM =COPY;删除
VIRTUAL
列ALTER TABLE t1DROP COLUMN c2,ALGORITHM =INSTANT;删除
VIRTUAL
列可以立即执行,也可以在未分区的表中执行。
外键操作
下表概述了对外键操作的联机DDL支持。星号表示其他信息,异常或依赖项。有关详细信息,请参见语法和用法说明。
对外键操作的在线DDL支持
运作方式 | 瞬间 | 到位 | 重建表 | 允许并发DML | 仅修改元数据 |
---|---|---|---|---|---|
添加外键约束 | 没有 | 是* | 没有 | 是 | 是 |
删除外键约束 | 没有 | 是 | 没有 | 是 | 是 |
语法和用法说明
添加外键约束
禁用
INPLACE
时支持该算法foreign_key_checks
。否则,仅COPY
支持算法。ALTER TABLE tbl1ADD CONSTRAINT fk_nameFOREIGN KEY index (col1)REFERENCES tbl2(col2) referential_actions;删除外键约束
ALTER TABLE tblDROP FOREIGN KEY fk_name;可以通过
foreign_key_checks
启用或禁用选项在线执行删除外键。如果您不知道特定表上的外键约束的名称,请发出以下语句,并在
CONSTRAINT
子句中为每个外键找到约束名称:SHOW CREATE TABLE table\G或者,查询
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
表并使用CONSTRAINT_NAME
和CONSTRAINT_TYPE
列标识外键名称。您还可以在单个语句中删除外键及其关联的索引:
ALTER TABLE tableDROP FOREIGN KEY constraint,DROP INDEX index;
注意如果要更改的表中已经存在外键(即,它是包含子句的子表
FOREIGN KEY ... REFERENCE
),则其他限制适用于联机DDL操作,即使那些不直接涉及外键列的操作也是如此:
- 一个
ALTER TABLE
子表上可以等待另一个事务提交,如果更改到父表导致子表通过相关的变化ON UPDATE
或ON DELETE
条款使用CASCADE
或SET NULL
参数。- 以同样的方式,如果表是父表的外键关系,即使它不包含任何
FOREIGN KEY
条款,它可以等待ALTER TABLE
完成如果一个INSERT
,UPDATE
或DELETE
声明引起ON UPDATE
或ON DELETE
动作子表。
表操作
下表概述了对表操作的在线DDL支持。星号表示其他信息,异常或依赖项。有关详细信息,请参见语法和用法说明。
对表操作的在线DDL支持
运作方式 | 瞬间 | 到位 | 重建表 | 允许并发DML | 仅修改元数据 |
---|---|---|---|---|---|
改变ROW_FORMAT | 没有 | 是 | 是 | 是 | 没有 |
改变KEY_BLOCK_SIZE | 没有 | 是 | 是 | 是 | 没有 |
设置持久表统计信息 | 没有 | 是 | 没有 | 是 | 是 |
指定字符集 | 没有 | 是 | 是* | 没有 | 没有 |
转换字符集 | 没有 | 没有 | 是* | 没有 | 没有 |
优化表 | 没有 | 是* | 是 | 是 | 没有 |
用FORCE 选项重建 | 没有 | 是* | 是 | 是 | 没有 |
执行空重建 | 没有 | 是* | 是 | 是 | 没有 |
重命名表格 | 是 | 是 | 没有 | 是 | 是 |
语法和用法说明
改变
ROW_FORMAT
ALTER TABLE tbl_nameROW_FORMAT = row_format,ALGORITHM =INPLACE,LOCK =NONE ;数据被大量重组,使其成为昂贵的操作。
有关该
ROW_FORMAT
选项的更多信息,请参见表选项。改变
KEY_BLOCK_SIZE
ALTER TABLE tbl_nameKEY_BLOCK_SIZE = value,ALGORITHM =INPLACE,LOCK =NONE ;数据被大量重组,使其成为昂贵的操作。
有关该
KEY_BLOCK_SIZE
选项的更多信息,请参见表选项。设置持久表统计信息选项
ALTER TABLE tbl_nameSTATS_PERSISTENT =0,STATS_SAMPLE_PAGES =20,STATS_AUTO_RECALC =1,ALGORITHM =INPLACE,LOCK =NONE ;仅修改表元数据。
持续的统计数据包括
STATS_PERSISTENT
,STATS_AUTO_RECALC
,和STATS_SAMPLE_PAGES
。有关更多信息,请参见“配置持久性优化器统计参数”。指定字符集
ALTER TABLE tbl_nameCHARACTER SET = charset_name,ALGORITHM =INPLACE,LOCK =NONE ;如果新字符编码不同,则重建表。
转换字符集
ALTER TABLE tbl_name CONVERTTO CHARACTER SET charset_name,ALGORITHM =COPY;如果新字符编码不同,则重建表。
优化表
OPTIMIZE TABLE tbl_name;具有
FULLTEXT
索引的表不支持就地操作。该操作使用的INPLACE
算法,但ALGORITHM
和LOCK
语法是不允许的。用
FORCE
选项重建表ALTER TABLE tbl_nameFORCE ,ALGORITHM =INPLACE,LOCK =NONE ;用途
ALGORITHM=INPLACE
为MySQL的5.6.17的。ALGORITHM=INPLACE
具有FULLTEXT
索引的表不支持。执行“空”重建
ALTER TABLE tbl_nameENGINE =InnoDB,ALGORITHM =INPLACE,LOCK =NONE ;用途
ALGORITHM=INPLACE
为MySQL的5.6.17的。ALGORITHM=INPLACE
具有FULLTEXT
索引的表不支持。重命名表格
ALTER TABLE old_tbl_nameRENAME TO new_tbl_name,ALGORITHM =INSTANT;重命名表可以立即执行,也可以就地执行。MySQL重命名与表相对应的文件,
tbl_name
但不进行复制。(您也可以使用该RENAME TABLE
语句来重命名表。请参见“ RENAME TABLE语句”。)专为重命名表授予的特权不会迁移到新名称。必须手动更改它们。
表空间操作
下表概述了对表空间操作的联机DDL支持。有关详细信息,请参见语法和用法说明。
对表空间操作的在线DDL支持
运作方式 | 瞬间 | 到位 | 重建表 | 允许并发DML | 仅修改元数据 |
---|---|---|---|---|---|
重命名通用表空间 | 没有 | 是 | 没有 | 是 | 是 |
启用或禁用常规表空间加密 | 没有 | 是 | 没有 | 是 | 没有 |
启用或禁用每表文件表空间加密 | 没有 | 没有 | 是 | 没有 | 没有 |
语法和用法说明
重命名通用表空间
ALTER TABLESPACE tablespace_nameRENAME TO new_tablespace_name;ALTER TABLESPACE ... RENAME TO
使用INPLACE
算法,但不支持该ALGORITHM
子句。启用或禁用常规表空间加密
ALTER TABLESPACE tablespace_nameENCRYPTION ='Y';ALTER TABLESPACE ... ENCRYPTION
使用INPLACE
算法,但不支持该ALGORITHM
子句。有关相关信息,请参见“ InnoDB静态数据加密”。
启用或禁用每表文件表空间加密
ALTER TABLE tbl_nameENCRYPTION ='Y',ALGORITHM =COPY;有关相关信息,请参见“ InnoDB静态数据加密”。
分区操作
除某些ALTER TABLE
分区子句外,分区InnoDB
表的联机DDL操作遵循与常规InnoDB
表相同的规则。
某些ALTER TABLE
分区子句与常规未分区InnoDB
表没有通过相同的内部在线DDL API 。结果,对ALTER TABLE
分区子句的在线支持有所不同。
下表显示了每个ALTER TABLE
分区语句的联机状态。无论使用哪种在线DDL API,MySQL都会尽可能地减少数据复制和锁定。
ALTER TABLE
使用ALGORITHM=COPY
或仅允许使用“ALGORITHM=DEFAULT, LOCK=DEFAULT
”的分区选项,使用COPY
算法对表进行重新分区。换句话说,将使用新的分区方案创建一个新的分区表。新创建的表包括该ALTER TABLE
语句应用的所有更改,并且表数据被复制到新的表结构中。
对分区操作的在线DDL支持
分区条款 | 瞬间 | 到位 | 允许DML | 注意 |
---|---|---|---|---|
PARTITION BY | 没有 | 没有 | 没有 | 许可证ALGORITHM=COPY ,LOCK={DEFAULT|SHARED|EXCLUSIVE} |
ADD PARTITION | 没有 | 是* | 是* | ALGORITHM=INPLACE, LOCK={DEFAULT|NONE|SHARED|EXCLUSISVE} 为支持RANGE 和LIST 分区,ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSISVE} 用于HASH 和KEY 分区,并且ALGORITHM=COPY, LOCK={SHARED|EXCLUSIVE} 对所有分区类型。不复制由RANGE 或分区的表的现有数据LIST 。允许ALGORITHM=COPY 对以HASH 或分区的表进行并发查询LIST ,因为MySQL会在持有共享锁的同时复制数据。 |
DROP PARTITION | 没有 | 是* | 是* |
|
DISCARD PARTITION | 没有 | 没有 | 没有 | 仅允许ALGORITHM=DEFAULT ,LOCK=DEFAULT |
IMPORT PARTITION | 没有 | 没有 | 没有 | 仅允许ALGORITHM=DEFAULT ,LOCK=DEFAULT |
TRUNCATE PARTITION | 没有 | 是 | 是 | 不复制现有数据。它只是删除行;它不会更改表本身或其任何分区的定义。 |
COALESCE PARTITION | 没有 | 是* | 没有 | ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} 支持。 |
REORGANIZE PARTITION | 没有 | 是* | 没有 | ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} 支持。 |
EXCHANGE PARTITION | 没有 | 是 | 是 | |
ANALYZE PARTITION | 没有 | 是 | 是 | |
CHECK PARTITION | 没有 | 是 | 是 | |
OPTIMIZE PARTITION | 没有 | 没有 | 没有 | ALGORITHM 和LOCK 子句将被忽略。重建整个表。请参见“分区维护”。 |
REBUILD PARTITION | 没有 | 是* | 没有 | ALGORITHM=INPLACE, LOCK={DEFAULT|SHARED|EXCLUSIVE} 支持。 |
REPAIR PARTITION | 没有 | 是 | 是 | |
REMOVE PARTITIONING | 没有 | 没有 | 没有 | 许可证ALGORITHM=COPY ,LOCK={DEFAULT|SHARED|EXCLUSIVE} |
ALTER TABLE
分区表上的非分区联机操作遵循与常规表相同的规则。但是,ALTER TABLE
在每个表分区上执行联机操作,由于在多个分区上执行操作而导致对系统资源的需求增加。
有关ALTER TABLE
分区子句的其他信息,请参见“分区选项”和“ ALTER TABLE分区操作”。有关常规分区的信息,请参见分区。