Spec-Zone.ru › MySQL 9.2

17.12.6 Упрощение операторов DDL с помощью онлайн-DDL

До появления онлайн-DDL, было обычной практикой объединять множество операций DDL в одном операторе ALTER TABLE. Поскольку каждый оператор ALTER TABLE включал копирование и перестроение таблицы, было эффективнее производить несколько изменений в одной таблице сразу, так как эти изменения можно было объединить в одной операции перестроения. Недостатком было то, что SQL-код, содержащий операции DDL, было сложнее поддерживать и повторно использовать в разных скриптах. Если изменения отличались каждый раз, вам приходилось создавать новый сложный оператор ALTER TABLE для каждого незначительно отличающегося сценария.

Для операций DDL, которые можно выполнить онлайн, вы можете разделить их на отдельные операторы ALTER TABLE для упрощения скриптинга и поддержки, не жертвуя эффективностью. Например, вы можете разбить сложный оператор, такой как:

ALTER TABLE t1 ADD INDEX i1(c1), ADD UNIQUE INDEX i2(c2),
  CHANGE c4_old_name c4_new_name INTEGER UNSIGNED;

на более простые части, которые можно протестировать и выполнить независимо, например:

ALTER TABLE t1 ADD INDEX i1(c1);
ALTER TABLE t1 ADD UNIQUE INDEX i2(c2);
ALTER TABLE t1 CHANGE c4_old_name c4_new_name INTEGER UNSIGNED NOT NULL;

Вы по-прежнему можете использовать многокомпонентные операторы ALTER TABLE для:

  • Операций, которые должны выполняться в определенной последовательности, например, создание индекса, за которым следует ограничение внешнего ключа, использующего этот индекс.

  • Операций, все использующие один и тот же конкретный LOCK оператор, которые вы хотите либо выполнить все вместе, либо отменить все вместе.

  • Операций, которые нельзя выполнить онлайн, то есть использующих метод копирования таблицы.

  • Операций, для которых вы задаете ALGORITHM=COPY или old_alter_table=1, чтобы принудительно использовать метод копирования таблицы, если это необходимо для точной обратной совместимости в специализированных сценариях.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/innodb-online-ddl-single-multi.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API