14.13.4 Упрощение операторов 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.