在线 DDL 功能支持即时和就地表更改以及并发 DML。此功能的好处包括:
在繁忙的生产环境中提高了响应能力和可用性,在这种情况下,让表格在几分钟或几小时内不可用是不切实际的。
对于就地操作,能够使用
LOCK子句在 DDL 操作期间调整性能和并发性之间的平衡。请参阅 LOCK 子句。比表复制方法更少的磁盘空间使用和 I/O 开销。
ALGORITHM=INSTANTADD COLUMNMySQL 8.0.12 中
的支持和其他操作可用
。
通常,您无需执行任何特殊操作即可启用在线 DDL。默认情况下,MySQL 在允许的情况下立即或就地执行操作,并尽可能少地锁定。
ALGORITHM您可以使用语句的andLOCK子句
控制 DDL 操作的各个方面
ALTER TABLE。这些子句放在语句的末尾,用逗号与表和列规范分开。例如:
ALTER TABLE tbl_name ADD PRIMARY KEY (column), ALGORITHM=INPLACE, LOCK=NONE;
该LOCK子句可用于就地执行的操作,可用于微调操作期间对表的并发访问程度。仅
LOCK=DEFAULT支持立即执行的操作。该ALGORITHM子句主要用于性能比较,并在您遇到任何问题时作为对旧表复制行为的回退。例如:
为避免在就地
ALTER TABLE操作期间意外使表不可用于读取、写入或两者,请在语句中指定一个子句,ALTER TABLE例如LOCK=NONE(允许读取和写入)或LOCK=SHARED(允许读取)。如果请求的并发级别不可用,操作将立即停止。要比较算法之间的性能,请运行包含
ALGORITHM=INSTANT、ALGORITHM=INPLACE和 的语句ALGORITHM=COPY。您还可以在old_alter_table启用配置选项的情况下运行语句以强制使用ALGORITHM=COPY.ALTER TABLE为避免复制表 的操作占用服务器,请包含ALGORITHM=INSTANT或ALGORITHM=INPLACE。如果语句不能使用指定的算法,它会立即停止。