Spec-Zone .ru
спецификации, руководства, описания, API

13.1.7. ALTER TABLE Синтаксис

13.1.7.1. ALTER TABLE Операции раздела
13.1.7.2. ALTER TABLE Онлайновые Операции в MySQLCluster
13.1.7.3. ALTER TABLE Примеры
ALTER [IGNORE] TABLE tbl_name    [alter_specification [, alter_specification] ...]    [partition_options]alter_specification:    table_options  | ADD [COLUMN] col_name column_definition        [FIRST | AFTER col_name ]  | ADD [COLUMN] (col_name column_definition,...)  | ADD {INDEX|KEY} [index_name]        [index_type] (index_col_name,...) [index_option] ...  | ADD [CONSTRAINT [symbol]] PRIMARY KEY        [index_type] (index_col_name,...) [index_option] ...  | ADD [CONSTRAINT [symbol]]        UNIQUE [INDEX|KEY] [index_name]        [index_type] (index_col_name,...) [index_option] ...  | ADD FULLTEXT [INDEX|KEY] [index_name]        (index_col_name,...) [index_option] ...  | ADD SPATIAL [INDEX|KEY] [index_name]        (index_col_name,...) [index_option] ...  | ADD [CONSTRAINT [symbol]]        FOREIGN KEY [index_name] (index_col_name,...)        reference_definition  | ALGORITHM [=] {DEFAULT|INPLACE|COPY}  | ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}  | CHANGE [COLUMN] old_col_name new_col_name column_definition        [FIRST|AFTER col_name]  | LOCK [=] {DEFAULT|NONE|SHARED|EXCLUSIVE}  | MODIFY [COLUMN] col_name column_definition        [FIRST | AFTER col_name]  | DROP [COLUMN] col_name  | DROP PRIMARY KEY  | DROP {INDEX|KEY} index_name  | DROP FOREIGN KEY fk_symbol  | DISABLE KEYS  | ENABLE KEYS  | RENAME [TO|AS] new_tbl_name  | ORDER BY col_name [, col_name] ...  | CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]  | [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]  | DISCARD TABLESPACE  | IMPORT TABLESPACE  | FORCE  | ADD PARTITION (partition_definition)  | DROP PARTITION partition_names  | TRUNCATE PARTITION {partition_names | ALL}  | COALESCE PARTITION number  | REORGANIZE PARTITION partition_names INTO (partition_definitions)  | EXCHANGE PARTITION partition_name WITH TABLE tbl_name  | ANALYZE PARTITION {partition_names | ALL}  | CHECK PARTITION {partition_names | ALL}  | OPTIMIZE PARTITION {partition_names | ALL}  | REBUILD PARTITION {partition_names | ALL}  | REPAIR PARTITION {partition_names | ALL}  | REMOVE PARTITIONINGindex_col_name:    col_name [(length)] [ASC | DESC]index_type:    USING {BTREE | HASH}index_option:    KEY_BLOCK_SIZE [=] value  | index_type  | WITH PARSER parser_name  | COMMENT 'string'table_options:    table_option [[,] table_option] ...  (see CREATE TABLE options)partition_options:    (see CREATE
        TABLE options)

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

Связанные с разделением пункты для ALTER TABLE может использоваться с разделенными таблицами для того, чтобы повторно разделить, для того, чтобы добавить, отбросить, объединить, и разделить разделы, и для того, чтобы выполнить обслуживание разделения. Это возможно для ALTER TABLE оператор, чтобы содержать a PARTITION BY или REMOVE PARTITIONING пункт в дополнении к другому изменять спецификации, но PARTITION BY или REMOVE PARTITIONING пункт должен быть определен последний после любых других спецификаций. ADD PARTITION, DROP PARTITION, COALESCE PARTITION, REORGANIZE PARTITION, ANALYZE PARTITION, CHECK PARTITION, и REPAIR PARTITION опции не могут быть объединены с другим изменять спецификации в сингле ALTER TABLE, начиная с опций только перечисленное действие на отдельных разделах. Для получения дополнительной информации см. Раздел 13.1.7.1,"ALTER TABLE Операции раздела".

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

Синтаксис для многих из допустимых изменений подобен пунктам CREATE TABLE оператор. См. Раздел 13.1.17,"CREATE TABLE Синтаксис", для получения дополнительной информации.

Некоторые операции могут привести к предупреждениям если предпринято на таблице, для которой механизм хранения не поддерживает работу. Эти предупреждения могут быть выведены на экран с SHOW WARNINGS. См. Раздел 13.7.5.41,"SHOW WARNINGS Синтаксис".

Для получения информации о поиске и устранении неисправностей ALTER TABLE, см. Раздел C.5.7.1, "Проблемы с ALTER TABLE".

Хранение, Производительность, и Соображения Параллелизма

В большинстве случаев, ALTER TABLE делает временную копию исходной таблицы. MySQL ожидает других операций, которые изменяют таблицу, затем продолжается. Это включает изменение в копию, удаляет исходную таблицу, и переименовывает новый. В то время как ALTER TABLE выполняется, исходная таблица читаема другими сеансами (с исключением, отмеченным коротко). Обновления и записи к таблице, которые начинаются после ALTER TABLE работа начинается, останавливаются, пока новая таблица не готова, затем автоматически перенаправляется к новой таблице без любых отказавших обновлений. Временная таблица создается в каталоге базы данных новой таблицы. Это может отличаться от каталога базы данных исходной таблицы для ALTER TABLE операции, которые переименовывают таблицу к различной базе данных.

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

Для MyISAM таблицы, можно убыстриться, индексируют воссоздание (самая медленная часть процесса изменения), устанавливая myisam_sort_buffer_size системная переменная к высокому значению.

Для некоторых операций, оперативного ALTER TABLE возможно, который не требует временной таблицы:

Можно вызвать ALTER TABLE работа, которая иначе не потребовала бы, чтобы табличная копия использовала метод временной таблицы (как поддерживающийся в MySQL 5.0), устанавливая old_alter_table системная переменная к ON, или определение ALGORITHM=COPY как один из alter_specification пункты. Если есть конфликт между old_alter_table установка и ALGORITHM пункт со значением кроме DEFAULT, ALGORITHM пункт имеет приоритет. (ALGORITHM = DEFAULT то же самое определение нет ALGORITHM пункт вообще.)

Определение ALGORITHM=INPLACE заставляет работу использовать оперативный метод для пунктов и механизмов хранения, которые поддерживают это, и сбой с ошибкой иначе, таким образом избегая длинной табличной копии, если Вы пытаетесь изменить таблицу, которая использует различный механизм хранения, чем Вы ожидаете. См. Раздел 5.5, "Онлайновый DDL для InnoDB Таблицы" для информации об онлайновом DDL для InnoDB таблицы.

MySQL Cluster также поддерживает онлайн ALTER TABLE операции используя ONLINE ключевое слово, поддерживаемое только MySQL Cluster; см. Раздел 13.1.7.2,"ALTER TABLE Онлайновые Операции в MySQL Cluster", для точного синтаксиса и других подробных сведений.

Можно управлять уровнем параллельного чтения и записи таблицы, в то время как это изменяется, используя LOCK пункт. Определение значения не по умолчанию для этого пункта позволяет Вам требовать определенного количества параллельного доступа или исключительности во время изменить работы, и останавливает работу, если требуемая степень блокировки не доступна. Параметры для LOCK пункт:

С MySQL 5.6.3 можно также использовать ALTER TABLE tbl_name FORCE чтобы выполнить "нуль" изменяют работу, которая восстанавливает таблицу. Ранее FORCE опция была распознана, но проигнорирована.

Для NDB таблицы, операции, которые добавляют и отбрасывание, индексируют на переменных-width столбцах, происходят онлайн, без любого табличного копирования и не блокируя параллельные действия DML для большей части их продолжительности. См. Раздел 13.1.7.2,"ALTER TABLE Онлайновые Операции в MySQL Cluster".

Примечания использования

С mysql_info() C API-функция, можно узнать, сколькими были скопированы строки ALTER TABLE, и (когда IGNORE используется), сколько строк было удалено из-за дублирования значений уникального ключа. См. Раздел 22.8.7.35,"mysql_info()".