#mysql #mariadb #innodb
#mysql #mariadb #innodb
Вопрос:
Я администратор базы данных, использующий MariaDB 10.4.13 на Centos7 и Centos8.
Нашей команде разработчиков нужен новый столбец в середине существующей (небольшой) таблицы.
Итак, мы использовали этот:
ALTER TABLE tablename ADD COLUMN c1 enum('DEL', 'END') not null default 'END' AFTER c5;
Это работает нормально, но я новичок в этой теме. (Раньше я работал администратором базы данных для MS-SQL и DB2).
Я не знаю, что именно MariaDB (физическое) использует ADD AFTER. Есть ли какие-либо риски? Может ли это вызвать какие-либо проблемы? В DB2 это не так просто.
Комментарии:
1. О каких рисках вы беспокоитесь — таблица блокируется во время выполнения инструкции? Вы могли бы клонировать свою текущую базу данных и запустить команду для клонирования, чтобы увидеть, есть ли какие-либо проблемы.
2. Операции DDL будут блокировать операции DML, включая чтение и запись. Итак, когда в вашей таблице много данных, это будет длительный временной блок. Для лучшего выбора вы можете использовать онлайн-операции ddl, которые не будут блокировать операции DML.
3. «Маленькая» таблица — просто сделайте это.
Ответ №1:
Добавляете ли вы новый столбец в качестве последнего столбца таблицы или в середине, не имеет значения. Любое изменение, которое изменяет размер строки, создает новое табличное пространство и копирует данные в новое табличное пространство. Это не вызывает проблем.
Он блокирует таблицу во время выполнения копирования. Но вы сказали, что это маленькая таблица. Это не очень конкретно (я не знаю, что вы считаете маленьким или большим), но, вероятно, это не займет много времени. Возможно, секунду или две.
Но если таблица постоянно используется приложением, даже кратковременная блокировка может привести к сбою приложения. Вам следует поговорить со своим менеджером об организации наилучшего времени для внесения изменений, которые не повлияют на приложение, использующее эту таблицу.