Как удалить колонку в mysql консоль

Обновлено: 04.07.2024

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

В запросе можно указать сразу несколько действий над одной таблицей через запятую.
Каждое действие — это манипуляция над столбцом.

Существуют следующие действия:

    — добавляет столбец в таблицу; — удаляет столбец; — переименовывает существующий столбец; — сбрасывает все значения в столбце для заданной партиции; — добавляет комментарий к столбцу; — изменяет тип столбца, выражение для значения по умолчанию и TTL; — удаляет какое-либо из свойств столбца; — делает столбец материализованным ( MATERIALIZED ) в кусках, в которых отсутствуют значения.

Подробное описание для каждого действия приведено ниже.

ADD COLUMN

Добавляет в таблицу новый столбец с именем name , типом type , кодеком codec и выражением для умолчания default_expr (смотрите раздел Значения по умолчанию).

Если указано IF NOT EXISTS , запрос не будет возвращать ошибку, если столбец уже существует. Если указано AFTER name_after (имя другого столбца), то столбец добавляется (в список столбцов таблицы) после указанного. Если вы хотите добавить столбец в начало таблицы, используйте FIRST . Иначе столбец добавляется в конец таблицы. Для цепочки действий name_after может быть именем столбца, который добавляется в одном из предыдущих действий.

Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree).

Такая схема позволяет добиться мгновенной работы запроса ALTER и отсутствия необходимости увеличивать объём старых данных.

DROP COLUMN

Удаляет столбец с именем name . Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

Запрос удаляет данные из файловой системы. Так как это представляет собой удаление целых файлов, запрос выполняется почти мгновенно.

Вы не можете удалить столбец, используемый в материализованном представлениии. В противном случае будет ошибка.

RENAME COLUMN

Переименовывает столбец name в new_name . Если указано выражение IF EXISTS , то запрос не будет возвращать ошибку при условии, что столбец name не существует. Поскольку переименование не затрагивает физические данные колонки, запрос выполняется практически мгновенно.

ЗАМЕЧЕНИЕ: Столбцы, являющиеся частью основного ключа или ключа сортировки (заданные с помощью ORDER BY или PRIMARY KEY ), не могут быть переименованы. Попытка переименовать эти слобцы приведет к SQL Error [524] .

CLEAR COLUMN

Сбрасывает все значения в столбце для заданной партиции. Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

Как корректно задать имя партиции, см. в разделе Как задавать имя партиции в запросах ALTER.

COMMENT COLUMN

Добавляет комментарий к таблице. Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

Каждый столбец может содержать только один комментарий. При выполнении запроса существующий комментарий заменяется на новый.

Посмотреть комментарии можно в столбце comment_expression из запроса DESCRIBE TABLE.

MODIFY COLUMN

Запрос изменяет следующие свойства столбца name :

Значение по умолчанию

Примеры изменения кодеков сжатия смотрите в разделе Кодеки сжатия столбцов.

Примеры изменения TTL столбца смотрите в разделе TTL столбца.

Если указано IF EXISTS , запрос не возвращает ошибку при условии, что столбец не существует.

Запрос также может изменять порядок столбцов при помощи FIRST | AFTER , смотрите описание ADD COLUMN.

При изменении типа, значения преобразуются так, как если бы к ним была применена функция toType. Если изменяется только выражение для умолчания, запрос не делает никакой сложной работы и выполняется мгновенно.

Изменение типа столбца - это единственное действие, которое выполняет сложную работу - меняет содержимое файлов с данными. Для больших таблиц, выполнение может занять длительное время.

Выполнение запроса ALTER атомарно.

Запрос ALTER на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы ALTER выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно.

MODIFY COLUMN REMOVE

Удаляет какое-либо из свойств столбца: DEFAULT , ALIAS , MATERIALIZED , CODEC , COMMENT , TTL .

Пример

Удаление свойства TTL:

Смотрите также

MATERIALIZE COLUMN

Материализует столбец таблицы в кусках, в которых отсутствуют значения. Используется, если необходимо создать новый столбец со сложным материализованным выражением или выражением для заполнения по умолчанию ( DEFAULT ), потому как вычисление такого столбца прямо во время выполнения запроса SELECT оказывается ощутимо затратным. Чтобы совершить ту же операцию для существующего столбца, используйте модификатор FINAL .

Пример

Результат:

Ограничения запроса ALTER

Запрос ALTER позволяет создавать и удалять отдельные элементы (столбцы) вложенных структур данных, но не вложенные структуры данных целиком. Для добавления вложенной структуры данных, вы можете добавить столбцы с именем вида name.nested_name и типом Array(T) - вложенная структура данных полностью эквивалентна нескольким столбцам-массивам с именем, имеющим одинаковый префикс до точки.

Отсутствует возможность удалять столбцы, входящие в первичный ключ или ключ для сэмплирования (в общем, входящие в выражение ENGINE ). Изменение типа у столбцов, входящих в первичный ключ возможно только в том случае, если это изменение не приводит к изменению данных (например, разрешено добавление значения в Enum или изменение типа с DateTime на UInt32 ).

Если возможностей запроса ALTER не хватает для нужного изменения таблицы, вы можете создать новую таблицу, скопировать туда данные с помощью запроса INSERT SELECT, затем поменять таблицы местами с помощью запроса RENAME, и удалить старую таблицу. В качестве альтернативы для запроса INSERT SELECT , можно использовать инструмент clickhouse-copier.

Запрос ALTER блокирует все чтения и записи для таблицы. То есть если на момент запроса ALTER выполнялся долгий SELECT , то запрос ALTER сначала дождётся его выполнения. И в это время все новые запросы к той же таблице будут ждать, пока завершится этот ALTER .

Для таблиц, которые не хранят данные самостоятельно (типа Merge и Distributed), ALTER всего лишь меняет структуру таблицы, но не меняет структуру подчинённых таблиц. Для примера, при ALTER-е таблицы типа Distributed , вам также потребуется выполнить запрос ALTER для таблиц на всех удалённых серверах.

Favorite

Добавить в избранное

Главное меню » Базы данных » База данных MySQL » Команда ALTER TABLE в MySQL: как добавить, удалить и изменить столбцы

(2 оценок, среднее: 5,00 из 5)

Команда ALTER TABLE в MySQL: как добавить, удалить и изменить столбцы

M ySQL (и MariaDB) позволяет изменять структуру таблиц с помощью команды ALTER TABLE в SQL. С помощью этой команды вы можете легко изменить имя своей таблицы и столбцов, добавить или удалить столбцы или изменить тип существующих столбцов. Давайте посмотрим на это в действии.

Использование и примеры ALTER TABLE

Во-первых, давайте создадим базу данных и таблицу, которые мы будем называть соответственно «mytest» и «andreyex». Вот как вы это сделаете:

Переименовать таблицу

Синтаксис для переименования таблицы:

Итак, чтобы изменить таблицу andreyex на «myusers», выполните следующие действия:

ALTER TABLE сам по себе ничего не делает. Начните с имени команды и таблицы, а затем укажите изменения, которые необходимо внести.

Добавление столбца и изменение свойств столбца

Синтаксис добавления столбца в таблицу:

Чтобы удалить столбец:

Здесь мы добавим строковый столбец «address», набрав:

Добавьте столбец TIMESTAMP с именем «date», введя следующую команду:

Добавьте индекс в столбец с именем «id», выполнив:

Также возможно сделать несколько дополнений одновременно:

Теперь наша таблица должна выглядеть так:

Изменить тип столбца

Синтаксис модификации столбцов:

Чтобы изменить поле адреса, чтобы разрешить более крупные строки:

Мы также можем объединить сразу несколько модификаций:

С помощью этой команды мы также изменили столбец с именем «name» на «lastname» и указали ему значения NULL.

Изменение значения столбца по умолчанию

Чтобы изменить значение по умолчанию для столбца, используйте синтаксис SET DEFAULT:

Теперь наша финальная таблица выглядит так:

Почему вы должны использовать ALTER TABLE?

Внесение изменений в структуру базы данных MySQL через командную строку и ALTER TABLE иногда может быть более быстрым и гибким, чем использование PHPMyAdmin или аналогичных инструментов графического интерфейса.

Команда предлагает еще больше возможностей, которые здесь мы не рассматривали. Для получения дополнительной информации ознакомьтесь с документацией по MySQL или задайте вопрос в разделе комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Команда ALTER TABLE используется для осуществления изменений таблицы:

  • Добавление колонок
  • Удаление колонок
  • Модификация колонок
  • Изменения имени таблицы
  • Изменения кодировки таблицы
  • Добавление и удаление ограничений

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

Чтобы просмотреть изменения колонок в таблице, воспользуйтесь командой:
SHOW COLUMNS FROM table_name;

Перед началом работ выберем базу данных, с которой будем работать.

Как добавить колонку к таблице MySQL?

Синтаксис добавления колонки в таблицу:

ALTER TABLE table_name ADD column_name data_type attributes;

Для примера добавим к таблице books колонку с именем discount, в которой будет хранится процент скидки на книги и amount для хранения количества книг.

Можно добавлять, удалять и модифицировать сразу несколько колонок за раз.

ALTER TABLE books ADD discount TINYINT UNSIGNED , ADD amount SMALLINT UNSIGNED ;

Каждая новая колонка добавляется в конец таблицы. Если вы хотите добавить новую колонку после определенной колонки, то используйте команду AFTER .

Добавим колонку shelf_position сразу после колонки price.

ALTER TABLE books ADD shelf_position VARCHAR (20) AFTER Price;

Как удалить колонку из таблицы MySQL?

Синтаксис удаления колонки из таблицы:

Если в таблице осталась только одна колонка, то ее удалить нельзя.

Удалим колонку edition с номером издания книги.

Как переставить колонки в таблице MySQL?

Чтобы переставить колонку используйте команду AFTER, также понадобится повторно определить тип данных.

ALTER TABLE table_name MODIFY COLUMN column_name data_type AFTER column_after_name;

Переместим колонку с ценой Price на место после колонки Author:

ALTER TABLE books MODIFY COLUMN Price DECIMAL (15,2) AFTER Author;

Как изменить имя и тип данных у колонки в таблице MySQL?

Синтаксис смены имени и типа данных у колонки:

ALTER TABLE table_name CHANGE COLUMN old_column_name new_column_name new_data_type;

Сменим имя у колонки сreation_date на entry_date и тип данных c TIMESTAMP на DATE .

ALTER TABLE books CHANGE COLUMN creation_date entry_date DATE ;

Если вы хотите сменить только тип данных, оставив имя колонки прежним, то воспользуйтесь следующим синтаксисом:

ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;

Как изменить значение по умолчанию в колонке таблицы MySQL?

С помощью команды ALTER также можно изменить значение по умолчанию для любой колонки, даже если оно не было установлено при создании таблицы.

Синтаксис установки значения по умолчанию для колонки:

ALTER TABLE table_name ALTER column_name SET DEFAULT value ;

Установим для колонки discount значение по умолчанию:

Чтобы удалить значение по умолчанию, используйте синтаксис:

ALTER TABLE table_name ALTER column_name DROP DEFAULT ;

Удалим созданное значение по умолчанию для колонки discount:

Как изменить имя таблицы MySQL?

Синтаксис переименования таблицы:

Изменим имя таблицы books на books_collection;

Как изменить метаданные о таблице в MySQL?

С помощью команды ALTER можно также изменить некоторые метаданные о таблице.

Для начала давайте их выведем.

Вывод для таблицы books будет выглядеть следующим образом.

mysql> SHOW TABLE STATUS LIKE 'books'\G;
*************************** 1. row ***************************
Name: books
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 24
Avg_row_length: 682
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 5242880
Auto_increment: 25
Create_time: 2019-01-18 20:00:32
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)

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

В запросе можно указать сразу несколько действий над одной таблицей через запятую.
Каждое действие — это манипуляция над столбцом.

Существуют следующие действия:

    — добавляет столбец в таблицу; — удаляет столбец; — переименовывает существующий столбец; — сбрасывает все значения в столбце для заданной партиции; — добавляет комментарий к столбцу; — изменяет тип столбца, выражение для значения по умолчанию и TTL; — удаляет какое-либо из свойств столбца; — делает столбец материализованным ( MATERIALIZED ) в кусках, в которых отсутствуют значения.

Подробное описание для каждого действия приведено ниже.

ADD COLUMN

Добавляет в таблицу новый столбец с именем name , типом type , кодеком codec и выражением для умолчания default_expr (смотрите раздел Значения по умолчанию).

Если указано IF NOT EXISTS , запрос не будет возвращать ошибку, если столбец уже существует. Если указано AFTER name_after (имя другого столбца), то столбец добавляется (в список столбцов таблицы) после указанного. Если вы хотите добавить столбец в начало таблицы, используйте FIRST . Иначе столбец добавляется в конец таблицы. Для цепочки действий name_after может быть именем столбца, который добавляется в одном из предыдущих действий.

Добавление столбца всего лишь меняет структуру таблицы, и не производит никаких действий с данными - соответствующие данные не появляются на диске после ALTER-а. При чтении из таблицы, если для какого-либо столбца отсутствуют данные, то он заполняется значениями по умолчанию (выполняя выражение по умолчанию, если такое есть, или нулями, пустыми строками). Также, столбец появляется на диске при слиянии кусков данных (см. MergeTree).

Такая схема позволяет добиться мгновенной работы запроса ALTER и отсутствия необходимости увеличивать объём старых данных.

DROP COLUMN

Удаляет столбец с именем name . Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

Запрос удаляет данные из файловой системы. Так как это представляет собой удаление целых файлов, запрос выполняется почти мгновенно.

Вы не можете удалить столбец, используемый в материализованном представлениии. В противном случае будет ошибка.

RENAME COLUMN

Переименовывает столбец name в new_name . Если указано выражение IF EXISTS , то запрос не будет возвращать ошибку при условии, что столбец name не существует. Поскольку переименование не затрагивает физические данные колонки, запрос выполняется практически мгновенно.

ЗАМЕЧЕНИЕ: Столбцы, являющиеся частью основного ключа или ключа сортировки (заданные с помощью ORDER BY или PRIMARY KEY ), не могут быть переименованы. Попытка переименовать эти слобцы приведет к SQL Error [524] .

CLEAR COLUMN

Сбрасывает все значения в столбце для заданной партиции. Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

Как корректно задать имя партиции, см. в разделе Как задавать имя партиции в запросах ALTER.

COMMENT COLUMN

Добавляет комментарий к таблице. Если указано IF EXISTS , запрос не будет возвращать ошибку, если столбца не существует.

Каждый столбец может содержать только один комментарий. При выполнении запроса существующий комментарий заменяется на новый.

Посмотреть комментарии можно в столбце comment_expression из запроса DESCRIBE TABLE.

MODIFY COLUMN

Запрос изменяет следующие свойства столбца name :

Значение по умолчанию

Примеры изменения кодеков сжатия смотрите в разделе Кодеки сжатия столбцов.

Примеры изменения TTL столбца смотрите в разделе TTL столбца.

Если указано IF EXISTS , запрос не возвращает ошибку при условии, что столбец не существует.

Запрос также может изменять порядок столбцов при помощи FIRST | AFTER , смотрите описание ADD COLUMN.

При изменении типа, значения преобразуются так, как если бы к ним была применена функция toType. Если изменяется только выражение для умолчания, запрос не делает никакой сложной работы и выполняется мгновенно.

Изменение типа столбца - это единственное действие, которое выполняет сложную работу - меняет содержимое файлов с данными. Для больших таблиц, выполнение может занять длительное время.

Выполнение запроса ALTER атомарно.

Запрос ALTER на изменение столбцов реплицируется. Соответствующие инструкции сохраняются в ZooKeeper, и затем каждая реплика их применяет. Все запросы ALTER выполняются в одном и том же порядке. Запрос ждёт выполнения соответствующих действий на всех репликах. Но при этом, запрос на изменение столбцов в реплицируемой таблице можно прервать, и все действия будут осуществлены асинхронно.

MODIFY COLUMN REMOVE

Удаляет какое-либо из свойств столбца: DEFAULT , ALIAS , MATERIALIZED , CODEC , COMMENT , TTL .

Пример

Удаление свойства TTL:

Смотрите также

MATERIALIZE COLUMN

Материализует столбец таблицы в кусках, в которых отсутствуют значения. Используется, если необходимо создать новый столбец со сложным материализованным выражением или выражением для заполнения по умолчанию ( DEFAULT ), потому как вычисление такого столбца прямо во время выполнения запроса SELECT оказывается ощутимо затратным. Чтобы совершить ту же операцию для существующего столбца, используйте модификатор FINAL .

Пример

Результат:

Ограничения запроса ALTER

Запрос ALTER позволяет создавать и удалять отдельные элементы (столбцы) вложенных структур данных, но не вложенные структуры данных целиком. Для добавления вложенной структуры данных, вы можете добавить столбцы с именем вида name.nested_name и типом Array(T) - вложенная структура данных полностью эквивалентна нескольким столбцам-массивам с именем, имеющим одинаковый префикс до точки.

Отсутствует возможность удалять столбцы, входящие в первичный ключ или ключ для сэмплирования (в общем, входящие в выражение ENGINE ). Изменение типа у столбцов, входящих в первичный ключ возможно только в том случае, если это изменение не приводит к изменению данных (например, разрешено добавление значения в Enum или изменение типа с DateTime на UInt32 ).

Если возможностей запроса ALTER не хватает для нужного изменения таблицы, вы можете создать новую таблицу, скопировать туда данные с помощью запроса INSERT SELECT, затем поменять таблицы местами с помощью запроса RENAME, и удалить старую таблицу. В качестве альтернативы для запроса INSERT SELECT , можно использовать инструмент clickhouse-copier.

Запрос ALTER блокирует все чтения и записи для таблицы. То есть если на момент запроса ALTER выполнялся долгий SELECT , то запрос ALTER сначала дождётся его выполнения. И в это время все новые запросы к той же таблице будут ждать, пока завершится этот ALTER .

Для таблиц, которые не хранят данные самостоятельно (типа Merge и Distributed), ALTER всего лишь меняет структуру таблицы, но не меняет структуру подчинённых таблиц. Для примера, при ALTER-е таблицы типа Distributed , вам также потребуется выполнить запрос ALTER для таблиц на всех удалённых серверах.

Читайте также: