15.1.9 Оператор ALTER TABLE
ALTER TABLE tbl_name
[alter_option [, alter_option] ...]
[partition_options]
alter_option: {
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] (key_part,...) [index_option] ...
| ADD {FULLTEXT | SPATIAL} [INDEX | KEY] [index_name]
(key_part,...) [index_option] ...
| ADD [CONSTRAINT [symbol]] PRIMARY KEY
[index_type] (key_part,...)
[index_option] ...
| ADD [CONSTRAINT [symbol]] UNIQUE [INDEX | KEY]
[index_name] [index_type] (key_part,...)
[index_option] ...
| ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (col_name,...)
reference_definition
| ADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED]
| DROP {CHECK | CONSTRAINT} symbol
| ALTER {CHECK | CONSTRAINT} symbol [NOT] ENFORCED
| ALGORITHM [=] {DEFAULT | INSTANT | INPLACE | COPY}
| ALTER [COLUMN] col_name {
SET DEFAULT {literal | (expr)}
| SET {VISIBLE | INVISIBLE}
| DROP DEFAULT
}
| ALTER INDEX index_name {VISIBLE | INVISIBLE}
| CHANGE [COLUMN] old_col_name new_col_name column_definition
[FIRST | AFTER col_name]
| [DEFAULT] CHARACTER SET [=] charset_name [COLLATE [=] collation_name]
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| {DISABLE | ENABLE} KEYS
| {DISCARD | IMPORT} TABLESPACE
| DROP [COLUMN] col_name
| DROP {INDEX | KEY} index_name
| DROP PRIMARY KEY
| DROP FOREIGN KEY fk_symbol
| FORCE
| LOCK [=] {DEFAULT | NONE | SHARED | EXCLUSIVE}
| MODIFY [COLUMN] col_name column_definition
[FIRST | AFTER col_name]
| ORDER BY col_name [, col_name] ...
| RENAME COLUMN old_col_name TO new_col_name
| RENAME {INDEX | KEY} old_index_name TO new_index_name
| RENAME [TO | AS] new_tbl_name
| {WITHOUT | WITH} VALIDATION
}
partition_options:
partition_option [partition_option] ...
partition_option: {
ADD PARTITION (partition_definition)
| DROP PARTITION partition_names
| DISCARD PARTITION {partition_names | ALL} TABLESPACE
| IMPORT PARTITION {partition_names | ALL} TABLESPACE
| TRUNCATE PARTITION {partition_names | ALL}
| COALESCE PARTITION number
| REORGANIZE PARTITION partition_names INTO (partition_definitions)
| EXCHANGE PARTITION partition_name WITH TABLE tbl_name [{WITH | WITHOUT} VALIDATION]
| 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 PARTITIONING
}
key_part: {col_name [(length)] | (expr)} [ASC | DESC]
index_type:
USING {BTREE | HASH}
index_option: {
KEY_BLOCK_SIZE [=] value
| index_type
| WITH PARSER parser_name
| COMMENT 'string'
| {VISIBLE | INVISIBLE}
}
table_options:
table_option [[,] table_option] ...
table_option: {
AUTOEXTEND_SIZE [=] value
| AUTO_INCREMENT [=] value
| AVG_ROW_LENGTH [=] value
| [DEFAULT] CHARACTER SET [=] charset_name
| CHECKSUM [=] {0 | 1}
| [DEFAULT] COLLATE [=] collation_name
| COMMENT [=] 'string'
| COMPRESSION [=] {'ZLIB' | 'LZ4' | 'NONE'}
| CONNECTION [=] 'connect_string'
| {DATA | INDEX} DIRECTORY [=] 'absolute path to directory'
| DELAY_KEY_WRITE [=] {0 | 1}
| ENCRYPTION [=] {'Y' | 'N'}
| ENGINE [=] engine_name
| ENGINE_ATTRIBUTE [=] 'string'
| INSERT_METHOD [=] { NO | FIRST | LAST }
| KEY_BLOCK_SIZE [=] value
| MAX_ROWS [=] value
| MIN_ROWS [=] value
| PACK_KEYS [=] {0 | 1 | DEFAULT}
| PASSWORD [=] 'string'
| ROW_FORMAT [=] {DEFAULT | DYNAMIC | FIXED | COMPRESSED | REDUNDANT | COMPACT}
| SECONDARY_ENGINE_ATTRIBUTE [=] 'string'
| STATS_AUTO_RECALC [=] {DEFAULT | 0 | 1}
| STATS_PERSISTENT [=] {DEFAULT | 0 | 1}
| STATS_SAMPLE_PAGES [=] value
| TABLESPACE tablespace_name [STORAGE {DISK | MEMORY}]
| UNION [=] (tbl_name[,tbl_name]...)
}
partition_options:
(see CREATE TABLE options)
ALTER TABLE изменяет структуру таблицы. Например, вы можете добавлять или удалять столбцы, создавать или удалять индексы, изменять тип существующих столбцов или переименовывать столбцы или саму таблицу. Вы также можете изменить характеристики, такие как используемый движок хранения для таблицы или комментарий к таблице.
Для использования
ALTER TABLE, вам нужны праваALTER,CREATEиINSERTдля таблицы. Переименование таблицы требует правALTERиDROPна старой таблице, а такжеALTER,CREATEиINSERTна новой таблице.После имени таблицы укажите изменения, которые нужно внести. Если их нет,
ALTER TABLEничего не делает.Синтаксис многих разрешенных изменений аналогичен клаузам оператора
CREATE TABLE. Клаузыcolumn_definitionиспользуют тот же синтаксис дляADDиCHANGE, что и дляCREATE TABLE. Для получения дополнительной информации см. Раздел 15.1.20, «Оператор CREATE TABLE».Слово
COLUMNявляется необязательным и может быть опущено, за исключением случаяRENAME COLUMN(чтобы отличить операцию переименования столбца от операции переименования таблицыRENAME).-
Несколько
ADD,ALTER,DROPиCHANGEклаузы допускаются в одном оператореALTER TABLE, разделенные запятыми. Это расширение MySQL к стандарту SQL, которое допускает только по одной клаузе каждого типа в одном оператореALTER TABLE. Например, чтобы удалить несколько столбцов в одном операторе, сделайте следующее:ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
Если движок хранения не поддерживает попытку операции
ALTER TABLE, может появиться предупреждение. Такие предупреждения можно отобразить с помощьюSHOW WARNINGS. См. Раздел 15.7.7.42, «Оператор SHOW WARNINGS». Сведения о устранении неполадок вALTER TABLEсм. в Разделе B.3.6.1, «Проблемы с ALTER TABLE».Сведения о генерируемых столбцах см. в Разделе 15.1.9.2, «ALTER TABLE и генерируемые столбцы».
Примеры использования см. в Разделе 15.1.9.3, «Примеры ALTER TABLE».
InnoDBподдерживает добавление индексов с несколькими значениями для столбцов JSON, используя спецификациюkey_part, которая может иметь вид(CAST. См. Индексы с несколькими значениями, чтобы узнать подробности о создании индексов с несколькими значениями и использовании, а также ограничениях и ограничениях на индексы с несколькими значениями.json_pathAStypeARRAY)-
С помощью функции C API можно узнать, сколько строк было скопировано оператором
ALTER TABLE. См. .
Есть несколько дополнительных аспектов оператора ALTER
TABLE, описанных в следующих разделах этого раздела:
Параметры таблицы
table_options обозначает параметры таблицы, которые могут быть использованы в операторе CREATE
TABLE, такие как ENGINE, AUTO_INCREMENT, AVG_ROW_LENGTH, MAX_ROWS, ROW_FORMAT или TABLESPACE.
Описания всех параметров таблицы см. в Разделе 15.1.20, «Оператор CREATE TABLE». Однако, ALTER TABLE игнорирует DATA
DIRECTORY и INDEX DIRECTORY, если они заданы в качестве параметров таблицы. ALTER TABLE допускает их только как параметры разбиения и требует права FILE.
Использование параметров таблицы с ALTER
TABLE предоставляет удобный способ изменения характеристик одной таблицы. Например:
-
Если
t1в настоящее время не является таблицей типаInnoDB, данное утверждение изменяет ее движок хранения наInnoDB:ALTER TABLE t1 ENGINE = InnoDB;
Обратитесь к разделу 17.6.1.5, «Преобразование таблиц из MyISAM в InnoDB» для рассмотрения аспектов при переключении таблиц на движок хранения
InnoDB.Когда вы указываете предложение
ENGINE,ALTER TABLEперестраивает таблицу. Это справедливо даже в том случае, если таблица уже имеет указанный движок хранения.Выполнение
ALTER TABLEна существующей таблицеtbl_nameENGINE=INNODBInnoDBвыполняет операцию “null”ALTER TABLE, которая может использоваться для дефрагментации таблицыInnoDB, как описано в разделе 17.11.4, «Дефрагментация таблицы». ВыполнениеALTER TABLEна таблицеtbl_nameFORCEInnoDBвыполняет ту же функцию.ALTER TABLEиtbl_nameENGINE=INNODBALTER TABLEиспользуют онлайн-DDL. Для получения дополнительной информации см. раздел 17.12, «InnoDB и онлайн-DDL».tbl_nameFORCEРезультат попытки изменить движок хранения таблицы зависит от доступности желаемого движка хранения и настройки SQL-режима
NO_ENGINE_SUBSTITUTION, как описано в разделе 7.1.11, «SQL-режимы сервера».Для предотвращения непреднамеренной потери данных
ALTER TABLEнельзя использовать для изменения движка хранения таблицы наMERGEилиBLACKHOLE.
-
Чтобы изменить таблицу
InnoDBдля использования сжатого формата хранения строк:ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
-
Предложение
ENCRYPTIONвключает или отключает шифрование данных на уровне страниц для таблицыInnoDB. Для включения шифрования необходимо установить и настроить плагин хранилища ключей.Если переменная
table_encryption_privilege_checkвключена, для использования предложенияENCRYPTIONс параметром, отличным от значения по умолчанию для шифрования схемы, требуется привилегияTABLE_ENCRYPTION_ADMIN.ENCRYPTIONтакже поддерживается для таблиц, находящихся в общих табличных пространствах.Для таблиц, находящихся в общих табличных пространствах, шифрование таблицы и табличного пространства должно совпадать.
Опция
ENCRYPTIONподдерживается только движком храненияInnoDB; таким образом, она работает только если таблица уже используетInnoDB(и вы не изменяете движок хранения таблицы), или если операторALTER TABLEтакже указываетENGINE=InnoDB. В противном случае оператор отклоняется с .Изменение шифрования таблицы путем перемещения таблицы в другое табличное пространство или изменения движка хранения запрещено без явного указания предложения
ENCRYPTION.Указание предложения
ENCRYPTIONсо значением, отличным от'N'или'', не допускается, если таблица использует движок хранения, не поддерживающий шифрование. Попытка создать таблицу без предложенияENCRYPTIONв схеме с включенным шифрованием с использованием движка хранения, не поддерживающего шифрование, также не допускается.Для получения дополнительной информации см. раздел 17.13, «Шифрование данных InnoDB на диске».
-
Чтобы сбросить текущее значение автоинкремента:
ALTER TABLE t1 AUTO_INCREMENT = 13;
Вы не можете сбросить счетчик до значения, меньшего или равного текущему используемому значению. Для обоих
InnoDBиMyISAM, если значение меньше или равно максимальному значению, в настоящее время в столбцеAUTO_INCREMENT, значение сбрасывается до текущего максимального значения столбцаAUTO_INCREMENTплюс единица. -
Чтобы изменить кодировку по умолчанию таблицы:
ALTER TABLE t1 CHARACTER SET = utf8mb4;
См. также Изменение кодировки.
-
Чтобы добавить (или изменить) комментарий к таблице:
ALTER TABLE t1 COMMENT = 'New table comment';
-
Используйте
ALTER TABLEс опциейTABLESPACEдля перемещенияInnoDBтаблиц между существующими , табличными пространствами и . См. Перемещение таблиц между табличными пространствами с помощью ALTER TABLE.Операции
ALTER TABLE ... TABLESPACEвсегда приводят к полной перестройке таблицы, даже если атрибутTABLESPACEне изменился по сравнению с его предыдущим значением.Синтаксис
ALTER TABLE ... TABLESPACEне поддерживает перемещение таблицы из временного табличного пространства в постоянное.Предложение
DATA DIRECTORY, которое поддерживается сCREATE TABLE ... TABLESPACE, не поддерживается сALTER TABLE ... TABLESPACEи игнорируется, если указано.Дополнительную информацию о возможностях и ограничениях опции
TABLESPACEсм. вCREATE TABLE.
-
MySQL NDB Cluster 8.4 поддерживает установку опций
NDB_TABLEдля управления балансом разделов таблицы (тип фрагментации), возможностью чтения из любого репликата, полным реплицированием или любой комбинацией из этих опций как части комментария к таблице для оператораALTER TABLEтаким же образом, как и дляCREATE TABLE, как показано в этом примере:ALTER TABLE t1 COMMENT = "NDB_TABLE=READ_BACKUP=0,PARTITION_BALANCE=FOR_RA_BY_NODE";
Также можно установить опции
NDB_COMMENTдля столбцов таблицNDBкак часть оператораALTER TABLE, например:ALTER TABLE t1 CHANGE COLUMN c1 c1 BLOB COMMENT = 'NDB_COLUMN=BLOB_INLINE_SIZE=4096,MAX_BLOB_PART_SIZE';Имейте в виду, что
ALTER TABLE ... COMMENT ...отбрасывает любой существующий комментарий к таблице. Дополнительную информацию и примеры см. в разделе «Установка опций NDB_TABLE». Опции
ENGINE_ATTRIBUTEиSECONDARY_ENGINE_ATTRIBUTEиспользуются для указания атрибутов таблиц, столбцов и индексов для первичных и вторичных движков хранения. Эти опции зарезервированы для использования в будущем. Атрибуты индексов нельзя изменить. Индекс необходимо удалить и добавить заново с желаемыми изменениями, что можно выполнить в одном оператореALTER TABLE.
Чтобы проверить, что опции таблицы были изменены должным образом, используйте SHOW CREATE TABLE или запросите таблицу схемы данных TABLES.
Производительность и требования к пространству
Операции ALTER TABLE обрабатываются с использованием одного из следующих алгоритмов:
COPY: Операции выполняются на копии исходной таблицы, а данные таблицы копируются из исходной таблицы в новую таблицу строка за строкой. Одновременные DML-операции запрещены.INPLACE: Операции избегают копирования данных таблицы, но могут перестроить таблицу на месте. В фазах подготовки и выполнения операции может кратковременно браться эксклюзивный метаданных блокировка на таблице. Как правило, поддерживаются одновременные DML-операции.INSTANT: Операции изменяют только метаданные в словаре данных. Эксклюзивный метаданных блокировка на таблице может кратковременно браться в фазе выполнения операции. Данные таблицы не затрагиваются, что делает операции мгновенными. Одновременные DML-операции разрешены.
Для таблиц, использующих движок хранения NDB, эти алгоритмы работают следующим образом:
-
COPY:NDBсоздает копию таблицы и изменяет ее; обработчик NDB Cluster затем копирует данные между старой и новой версиями таблицы. После этогоNDBудаляет старую таблицу и переименовывает новую.Это иногда также называется “копированием” или “офлайн”
ALTER TABLE. -
INPLACE: Узлы данных вносят необходимые изменения; обработчик NDB Cluster не копирует данные и иначе не участвует.Это иногда также называется “некопированием” или “онлайн”
ALTER TABLE. INSTANT: Не поддерживаетсяNDB.
См. Раздел 25.6.12, «Операции в режиме онлайн с ALTER TABLE в NDB Cluster» для получения дополнительной информации.
Оператор ALGORITHM является необязательным. Если оператор ALGORITHM опущен, MySQL использует ALGORITHM=INSTANT для типов хранилища и операторов ALTER TABLE, которые их поддерживают. В противном случае используется ALGORITHM=INPLACE. Если ALGORITHM=INPLACE не поддерживается, используется ALGORITHM=COPY.
После добавления столбца в разбиение таблицы с использованием ALGORITHM=INSTANT, больше невозможно выполнить ALTER
TABLE ... EXCHANGE PARTITION для этой таблицы.
Указание оператора ALGORITHM требует использования указанного алгоритма для операторов и типов хранилища, которые его поддерживают, в противном случае операция завершается ошибкой. Указание ALGORITHM=DEFAULT эквивалентно опущению оператора ALGORITHM.
Операции ALTER TABLE с использованием алгоритма COPY ожидают завершения других операций, изменяющих таблицу. После применения изменений к копии таблицы, данные копируются, исходная таблица удаляется, а копия таблицы переименовывается в имя исходной таблицы. Пока выполняется операция ALTER TABLE, исходная таблица остается доступной для чтения другими сессиями (за исключением указанного ниже случая). Обновления и записи в таблицу, начатые после начала операции ALTER
TABLE, приостанавливаются до готовности новой таблицы, а затем автоматически перенаправляются на новую таблицу. Временная копия таблицы создается в каталоге базы данных исходной таблицы, если это не операция RENAME TO, перемещающая таблицу в базу данных, расположенную в другом каталоге.
Исключение, упомянутое ранее, заключается в том, что операция ALTER TABLE блокирует чтение (а не только запись) в момент готовности очистить устаревшие структуры таблиц из кэшей таблиц и определений таблиц. В этот момент она должна получить эксклюзивную блокировку. Для этого она ожидает завершения текущих операций чтения и блокирует новые операции чтения и записи.
Операция ALTER TABLE с использованием алгоритма COPY предотвращает одновременные операции DML. Одновременные запросы по-прежнему разрешены. То есть операция копирования таблицы всегда включает в себя по крайней мере ограничения одновременности LOCK=SHARED (разрешены запросы, но не DML). Вы можете дополнительно ограничить одновременность для операций, поддерживающих оператор LOCK, указав LOCK=EXCLUSIVE, что предотвращает DML и запросы. Дополнительную информацию см. в Управлении одновременностью.
Чтобы принудительно использовать алгоритм COPY для операции ALTER TABLE, которая в противном случае его не использует, укажите ALGORITHM=COPY или включите системную переменную old_alter_table. Если есть конфликт между параметром old_alter_table и оператором ALGORITHM со значением, отличным от DEFAULT, приоритет имеет оператор ALGORITHM.
Для таблиц InnoDB, операция ALTER TABLE с использованием алгоритма COPY для таблицы, расположенной в может увеличить объем пространства, используемого табличным пространством. Такие операции требуют столько дополнительного пространства, сколько данных в таблице плюс индексы. Для таблицы, расположенной в общем табличном пространстве, дополнительное используемое пространство во время операции не возвращается операционной системе, как это происходит для таблицы, расположенной в табличном пространстве.
Сведения о требованиях к пространству для операций онлайн DDL см. в Разделе 17.12.3, «Требования к пространству для операций онлайн DDL».
Операции ALTER TABLE, поддерживающие алгоритм INPLACE, включают:
Операции
ALTER TABLE, поддерживаемые функциейInnoDB. См. Раздел 17.12.1, «Операции онлайн DDL».Переименование таблицы. MySQL переименовывает файлы, соответствующие таблице
tbl_name, без создания копии. (Вы также можете использовать операторRENAME TABLEдля переименования таблиц. См. Раздел 15.1.36, «Оператор RENAME TABLE».) Разрешения, предоставленные для переименованной таблицы, не мигрируются в новое имя. Их необходимо изменить вручную.-
Операции, изменяющие только метаданные таблицы. Эти операции выполняются немедленно, поскольку сервер не затрагивает содержимое таблицы. К операциям, изменяющим только метаданные, относятся:
Переименование столбца. В NDB Cluster эта операция также может выполняться в режиме онлайн.
Изменение значения по умолчанию для столбца (за исключением таблиц
NDB).Изменение определения столбца типа
ENUMилиSETпутем добавления новых элементов перечисления или множества в конец списка допустимых значений элементов, при условии, что размер хранения типа данных не изменится. Например, добавление элемента в столбец типаSETс 8 элементами изменяет требуемый размер хранения на значение с 1 байта на 2 байта; это требует копирования таблицы. Добавление элементов в середину списка приводит к переиндексации существующих элементов, что требует копирования таблицы.Изменение определения пространственного столбца для удаления атрибута
SRID. (Добавление или изменение атрибутаSRIDтребует перестроения и не может быть выполнено на месте, поскольку сервер должен проверить, что все значения имеют указанное значениеSRID.)-
Изменение набора символов столбца, если выполняются следующие условия:
-
Изменение столбца, генерируемого столбца, когда выполняются следующие условия:
Для таблиц
InnoDBоператоры, изменяющие сгенерированные хранимые столбцы, но не изменяющие их тип, выражение или необязательность.Для таблиц, не являющихся
InnoDB, операторы, изменяющие сгенерированные хранимые или виртуальные столбцы, но не изменяющие их тип, выражение или необязательность.
Пример такого изменения — изменение комментария к столбцу.
Переименование индекса.
Добавление или удаление вторичного индекса для таблиц
InnoDBиNDB. См. Раздел 17.12.1, «Операции онлайн DDL».Для таблиц
NDB, операции добавления и удаления индексов по столбцам переменной длины. Эти операции выполняются онлайн без копирования таблицы и без блокирования одновременных операций DML в течение большей части их выполнения. См. Раздел 25.6.12, «Операции в режиме онлайн с ALTER TABLE в NDB Cluster».Изменение видимости индекса с помощью операции
ALTER INDEX.Модификации столбцов таблиц, содержащих сгенерированные столбцы, зависящие от столбцов со значением
DEFAULT, если измененные столбцы не участвуют в выражениях сгенерированных столбцов. Например, изменение свойстваNULLотдельного столбца можно выполнить на месте без перестроения таблицы.
Операции ALTER TABLE, которые поддерживают алгоритм INSTANT, включают:
Добавление столбца. Эта функция обозначается как «Instant
ADD COLUMN». Применяются ограничения. См. Раздел 17.12.1, «Операции DDL онлайн».Удаление столбца. Эта функция обозначается как «Instant
DROP COLUMN». Применяются ограничения. См. Раздел 17.12.1, «Операции DDL онлайн».Добавление или удаление виртуального столбца.
Добавление или удаление значения по умолчанию для столбца.
Изменение определения столбца типа
ENUMилиSET. Те же ограничения применяются, что и описано выше дляALGORITHM=INSTANT.Изменение типа индекса.
Переименование таблицы. Те же ограничения применяются, что и описано выше для
ALGORITHM=INSTANT.
Для получения дополнительной информации об операциях, которые поддерживают ALGORITHM=INSTANT, см. Раздел 17.12.1, «Операции DDL онлайн».
ALTER TABLE повышает формат временных столбцов MySQL 5.5 до 5.6 формата для операций ADD COLUMN, CHANGE COLUMN, MODIFY
COLUMN, ADD INDEX и FORCE. Эта конвертация не может быть выполнена с помощью алгоритма INPLACE, так как таблица должна быть перестроена, поэтому указание ALGORITHM=INPLACE в этих случаях приводит к ошибке. Укажите ALGORITHM=COPY при необходимости.
Если операция ALTER TABLE над многостолбцовым индексом, используемым для разбиения таблицы по KEY, изменяет порядок столбцов, она может быть выполнена только с помощью ALGORITHM=COPY.
Определения WITHOUT VALIDATION и WITH
VALIDATION влияют на то, выполняет ли ALTER TABLE операцию на месте для изменений. См. Раздел 15.1.9.2, «ALTER TABLE и сгенерированные столбцы».
NDB Cluster 8.4 поддерживает онлайн-операции, используя тот же синтаксис ALGORITHM=INPLACE, что и стандартный MySQL Server. NDB не позволяет изменять табличный пространство онлайн. Для получения дополнительной информации см. Раздел 25.6.12, «Операции онлайн с ALTER TABLE в NDB Cluster».
При выполнении копирования ALTER TABLE, NDB проверяет, не были ли произведены одновременные записи в затронутую таблицу. Если обнаружено, что такие записи были сделаны, NDB отклоняет оператор ALTER TABLE и поднимает ошибку.
ALTER TABLE с DISCARD ... PARTITION
... TABLESPACE или IMPORT ... PARTITION ...
TABLESPACE не создает временных таблиц или временных файлов разбиений.
ALTER TABLE с ADD
PARTITION, DROP PARTITION, COALESCE PARTITION, REBUILD
PARTITION или REORGANIZE PARTITION не создает временные таблицы (за исключением использования с таблицами NDB); однако, эти операции могут и создают временные файлы разбиений.
Операции ADD или DROP для разбиений RANGE или LIST являются мгновенными операциями или почти мгновенными. Операции ADD или COALESCE для разбиений HASH или KEY копируют данные между всеми разбиениями, если не использовались LINEAR HASH или LINEAR KEY; это по сути то же самое, что создание новой таблицы, хотя операция ADD или COALESCE выполняется по разбиению. Операции REORGANIZE копируют только измененные разбиения и не трогают неизмененные.
Для таблиц MyISAM можно ускорить повторное создание индексов (самая медленная часть процесса изменения) путем установки системной переменной myisam_sort_buffer_size на высокое значение.
Управление одновременностью
Для операций ALTER TABLE, которые их поддерживают, можно использовать предложение LOCK для управления уровнем одновременных чтений и записей в таблице во время ее изменения. Указание ненулевого значения для этого предложения позволяет потребовать определенного уровня одновременного доступа или исключительности во время операции изменения и останавливает операцию, если запрошенная степень блокировки недоступна.
Только LOCK = DEFAULT разрешено для операций, использующих ALGORITHM=INSTANT. Другие параметры предложения LOCK неприменимы.
Параметры предложения LOCK:
-
LOCK = DEFAULTМаксимальный уровень одновременности для данного предложения
ALGORITHM(если есть) и операцииALTER TABLE: Разрешить одновременные чтение и запись, если поддерживается. Если нет, разрешить одновременное чтение, если поддерживается. Если нет, принудительно использовать исключительный доступ. -
LOCK = NONEЕсли поддерживается, разрешить одновременные чтение и запись. В противном случае произойдет ошибка.
-
LOCK = SHAREDЕсли поддерживается, разрешить одновременное чтение, но заблокировать записи. Записи заблокированы даже если одновременные записи поддерживаются хранилищем для данного предложения
ALGORITHM(если есть) и операцииALTER TABLE. Если одновременное чтение не поддерживается, произойдет ошибка. -
LOCK = EXCLUSIVEПринудительно использовать исключительный доступ. Это делается даже если одновременные чтение/запись поддерживаются хранилищем для данного предложения
ALGORITHM(если есть) и операцииALTER TABLE.
Добавление и удаление столбцов
Используйте ADD для добавления новых столбцов в таблицу и DROP для удаления существующих столбцов. DROP
— это расширение MySQL для стандартного SQL. col_name
Чтобы добавить столбец в определенной позиции в строке таблицы, используйте FIRST или AFTER
. По умолчанию столбец добавляется в конец. col_name
Если таблица содержит только один столбец, столбец нельзя удалить. Если вы хотите удалить таблицу, используйте оператор DROP TABLE вместо этого.
Если столбцы удаляются из таблицы, столбцы также удаляются из любого индекса, частью которого они являются. Если все столбцы, составляющие индекс, удаляются, индекс также удаляется. Если вы используете CHANGE или MODIFY для сокращения длины столбца, на котором существует индекс, и полученная длина столбца меньше длины индекса, MySQL автоматически сокращает индекс.
Для ALTER TABLE ... ADD, если столбец имеет значение по умолчанию, основанное на выражении, использующем недетерминированную функцию, оператор может выдать предупреждение или ошибку. Для получения дополнительной информации см. Раздел 13.6, «Значения по умолчанию типов данных» и Раздел 19.1.3.7, «Ограничения репликации с GTID».
Переименование, переопределение и переупорядочение столбцов
Предложения CHANGE, MODIFY, RENAME COLUMN и ALTER позволяют изменить имена и определения существующих столбцов. У них есть следующие сравнительные характеристики:
-
CHANGE:Может переименовать столбец и изменить его определение, или оба действия.
Обладает большей функциональностью, чем
MODIFYилиRENAME COLUMN, но с потерей удобства для некоторых операций.CHANGEтребует дважды назвать столбец, если его не переименовывают, и требует повторного определения столбца, если только переименовывают.С помощью
FIRSTилиAFTERможет переупорядочить столбцы.
-
MODIFY:Может изменить определение столбца, но не его имя.
Более удобно, чем
CHANGE, для изменения определения столбца без его переименования.С помощью
FIRSTилиAFTERможет переупорядочить столбцы.
-
RENAME COLUMN:Может изменить имя столбца, но не его определение.
Более удобно, чем
CHANGE, для переименования столбца без изменения его определения.
ALTER: Используется только для изменения значения по умолчанию столбца.
CHANGE — это расширение MySQL для стандартного SQL. MODIFY и RENAME COLUMN — расширения MySQL для совместимости с Oracle.
Чтобы изменить столбец, изменив как его имя, так и определение, используйте CHANGE, указав старое и новое имена и новое определение. Например, чтобы переименовать столбец INT NOT
NULL с a на b и изменить его определение, чтобы использовать тип данных BIGINT, сохранив атрибут NOT NULL, сделайте так:
ALTER TABLE t1 CHANGE a b BIGINT NOT NULL;
Для изменения определения столбца, но не его имени, используйте CHANGE или MODIFY. С помощью CHANGE синтаксис требует двух имён столбцов, поэтому необходимо указать одно и то же имя дважды, чтобы оставить имя неизменным. Например, чтобы изменить определение столбца b, сделайте так:
ALTER TABLE t1 CHANGE b b INT NOT NULL;
MODIFY удобнее для изменения определения без изменения имени, так как оно требует имени столбца только один раз:
ALTER TABLE t1 MODIFY b INT NOT NULL;
Чтобы изменить имя столбца, но не его определение, используйте CHANGE или RENAME COLUMN. С помощью CHANGE синтаксис требует определения столбца, поэтому, чтобы оставить определение неизменным, необходимо снова указать текущее определение столбца. Например, чтобы переименовать столбец INT NOT NULL из b в a, сделайте так:
ALTER TABLE t1 CHANGE b a INT NOT NULL;
RENAME COLUMN удобнее для изменения имени без изменения определения, так как оно требует только старое и новое имена:
ALTER TABLE t1 RENAME COLUMN b TO a;
В общем случае, вы не можете переименовать столбец в имя, которое уже существует в таблице. Однако, это иногда не так, например, при обмене именами или их перемещении по циклу. Если таблица имеет столбцы с именами a, b и c, эти операции допустимы:
-- swap a and b
ALTER TABLE t1 RENAME COLUMN a TO b,
RENAME COLUMN b TO a;
-- "rotate" a, b, c through a cycle
ALTER TABLE t1 RENAME COLUMN a TO b,
RENAME COLUMN b TO c,
RENAME COLUMN c TO a;
При изменении определения столбца с помощью CHANGE или MODIFY, определение должно включать тип данных и все атрибуты, которые должны применяться к новому столбцу, за исключением атрибутов индекса, таких как PRIMARY KEY или UNIQUE. Атрибуты, присутствующие в исходном определении, но не указанные для нового определения, не переносятся. Предположим, что столбец col1 определён как INT UNSIGNED DEFAULT 1 COMMENT 'my
column', и вы изменяете столбец следующим образом, намереваясь изменить только INT на BIGINT:
ALTER TABLE t1 MODIFY col1 BIGINT;
Это утверждение меняет тип данных с INT на BIGINT, но также удаляет атрибуты UNSIGNED, DEFAULT и COMMENT. Чтобы сохранить их, утверждение должно явно их включить:
ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';
При изменении типа данных с помощью CHANGE или MODIFY MySQL пытается преобразовать существующие значения столбцов в новый тип наиболее возможным образом.
Это преобразование может привести к изменению данных. Например, если вы сокращаете строковый столбец, значения могут быть усечены. Чтобы предотвратить выполнение операции, если преобразование в новый тип данных приведёт к потере данных, включите строгий режим SQL перед использованием ALTER TABLE (см. Раздел 7.1.11, «Режимы SQL сервера»).
Если вы используете CHANGE или MODIFY для сокращения столбца, на котором существует индекс, и результирующая длина столбца меньше длины индекса, MySQL автоматически сокращает индекс.
Для столбцов, переименованных с помощью CHANGE или RENAME COLUMN, MySQL автоматически переименовывает эти ссылки на переименованный столбец:
Индексы, которые ссылаются на старый столбец, включая невидимые индексы и отключенные
MyISAMиндексы.Внешние ключи, которые ссылаются на старый столбец.
Для столбцов, переименованных с помощью CHANGE или RENAME COLUMN, MySQL не переименовывает автоматически эти ссылки на переименованный столбец:
Сгенерированные столбцы и выражения разделов, которые ссылаются на переименованный столбец. Вы должны использовать
CHANGEдля определения таких выражений в том жеALTER TABLEоператоре, что и тот, который переименовывает столбец.Виды и хранимые программы, которые ссылаются на переименованный столбец. Вы должны вручную изменить определение этих объектов, чтобы они ссылались на новое имя столбца.
Для изменения порядка столбцов в таблице используйте FIRST и AFTER в операциях CHANGE или MODIFY.
ALTER ... SET DEFAULT или ALTER ...
DROP DEFAULT задают новое значение по умолчанию для столбца или удаляют старое значение по умолчанию, соответственно. Если старое значение по умолчанию удаляется, и столбец может быть NULL, то новое значение по умолчанию — NULL. Если столбец не может быть NULL, MySQL назначит значение по умолчанию, как описано в Разделе 13.6, «Значения по умолчанию типов данных».
ALTER ... SET VISIBLE и ALTER ...
SET INVISIBLE позволяют изменить видимость столбцов. См. Раздел 15.1.20.10, «Невидимые столбцы».
Первичные ключи и индексы
DROP PRIMARY KEY удаляет . Если первичного ключа нет, возникает ошибка. Подробную информацию об характеристиках производительности первичных ключей, особенно для InnoDB таблиц, см. в Разделе 10.3.2, «Оптимизация первичного ключа».
Если системная переменная sql_require_primary_key включена, попытка удалить первичный ключ приводит к ошибке.
Если вы добавляете UNIQUE INDEX или PRIMARY
KEY в таблицу, MySQL сохраняет его перед любым не уникальным индексом, чтобы позволить обнаружение дублирующих ключей как можно раньше.
DROP INDEX удаляет индекс. Это расширение MySQL к стандартному SQL. См. Раздел 15.1.27, «Оператор DROP INDEX». Чтобы определить имена индексов, используйте SHOW INDEX FROM
. tbl_name
Некоторые движки хранилищ позволяют указать тип индекса при создании индекса. Синтаксис для спецификатора index_type — USING
. Подробнее о type_nameUSING см. в Разделе 15.1.15, «Оператор CREATE INDEX». Предпочтительное положение — после списка столбцов. Ожидается, что поддержка использования опции перед списком столбцов будет удалена в будущих версиях MySQL.
Значения index_option указывают дополнительные параметры для индекса. USING — один из таких параметров. Подробнее о допустимых значениях index_option см. в Разделе 15.1.15, «Оператор CREATE INDEX».
RENAME INDEX переименовывает индекс. Это расширение MySQL к стандартному SQL. Содержимое таблицы остаётся неизменным. old_index_name TO
new_index_nameold_index_name должно быть именем существующего индекса в таблице, который не удаляется в том же ALTER TABLE операторе. new_index_name — новое имя индекса, которое не может дублировать имя индекса в результирующей таблице после применения изменений. Ни одно имя индекса не может быть PRIMARY.
Если вы используете ALTER TABLE на MyISAM таблице, все не уникальные индексы создаются в отдельной партии (как для REPAIR
TABLE). Это должно сделать ALTER
TABLE намного быстрее, когда у вас много индексов.
Для MyISAM таблиц обновление ключей может быть контролировано явно. Используйте ALTER TABLE ... DISABLE
KEYS, чтобы сказать MySQL, что он должен прекратить обновление не уникальных индексов. Затем используйте ALTER TABLE ... ENABLE KEYS для повторного создания отсутствующих индексов. MyISAM делает это со специальным алгоритмом, который намного быстрее, чем вставка ключей по одному, поэтому отключение ключей перед выполнением операций массовой вставки должно дать значительный прирост скорости. Использование ALTER TABLE ... DISABLE KEYS требует привилегии INDEX в дополнение к ранее упомянутым привилегиям.
Пока не уникальные индексы отключены, они игнорируются для инструкций, таких как SELECT и EXPLAIN, которые в противном случае использовали бы их.
После оператора ALTER TABLE, может потребоваться запустить ANALYZE
TABLE для обновления информации о кардинальности индексов. См. Раздел 15.7.7.23, «Оператор SHOW INDEX».
Операция ALTER INDEX позволяет сделать индекс видимым или невидимым. Невидимый индекс не используется оптимизатором. Изменение видимости индексов применяется к индексам, отличным от первичных ключей (явных или неявных), и не может быть выполнено с помощью ALGORITHM=INSTANT. Эта функция не зависит от движка хранилища (поддерживается для любого движка). Дополнительную информацию см. в Разделе 10.3.12, «Невидимые индексы».
Внешние ключи и другие ограничения
Оператор FOREIGN KEY и REFERENCES поддерживаются движками хранения InnoDB и NDB, которые реализуют ADD [CONSTRAINT
[. См. Раздел 15.1.20.5, «Ограничения FOREIGN KEY». Для других движков хранения операторы обрабатываются, но игнорируются. symbol]] FOREIGN KEY
[index_name] (...) REFERENCES ...
(...)
Для ALTER TABLE, в отличие от CREATE TABLE, ADD FOREIGN
KEY игнорирует index_name, если оно указано, и использует автоматически сгенерированное имя внешнего ключа. В качестве обходного решения включите оператор CONSTRAINT для указания имени внешнего ключа:
ADD CONSTRAINT name FOREIGN KEY (....) ...
MySQL игнорирует встроенные REFERENCES спецификации, где ссылки определены как часть спецификации столбца. MySQL принимает только REFERENCES клаузы, определенные как часть отдельной FOREIGN KEY спецификации.
Разделенные InnoDB таблицы не поддерживают внешние ключи. Это ограничение не распространяется на NDB таблицы, включая те, которые явно разделены [LINEAR] KEY. Более подробная информация представлена в Разделе 26.6.2 «Ограничения разбиения, связанные с движками хранилища».
MySQL Server и NDB Cluster поддерживают использование ALTER TABLE для удаления внешних ключей:
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
Добавление и удаление внешнего ключа в одном ALTER TABLE операторе поддерживается для ALTER TABLE ...
ALGORITHM=INPLACE, но не для ALTER TABLE ...
ALGORITHM=COPY.
Сервер запрещает изменения столбцов внешнего ключа, которые могут привести к нарушению целостности ссылок. В качестве обходного пути можно использовать ALTER TABLE
... DROP FOREIGN KEY перед изменением определения столбца и ALTER
TABLE ... ADD FOREIGN KEY после него. Примеры запрещенных изменений включают:
Изменения типа данных столбцов внешнего ключа, которые могут быть небезопасными. Например, изменение
VARCHAR(20)наVARCHAR(30)разрешено, но изменение наVARCHAR(1024)недопустимо, поскольку это изменяет количество байтов длины, необходимых для хранения отдельных значений.Изменение столбца
NULLнаNOT NULLв режиме без проверки запрещено, чтобы предотвратить преобразование значенийNULLв значения по умолчанию безNULL, для которых нет соответствующих значений в связанной таблице. Операция разрешена в строгом режиме, но возвращается ошибка, если такое преобразование необходимо.
ALTER TABLE изменяет имена ограничений внешних ключей, сгенерированные внутренне, и имена ограничений внешних ключей, определенные пользователем, начинающиеся с строки “tbl_name RENAME
new_tbl_nametbl_name_ibfk_”, чтобы отразить новое имя таблицы. InnoDB интерпретирует имена ограничений внешних ключей, начинающиеся со строки “tbl_name_ibfk_”, как сгенерированные внутренне.
ALTER TABLE позволяет добавлять, удалять или изменять ограничения CHECK для существующих таблиц:
-
Добавить новое ограничение
CHECK:ALTER TABLE
tbl_nameADD [CONSTRAINT [symbol]] CHECK (expr) [[NOT] ENFORCED];Значение элементов синтаксиса ограничений такое же, как и для
CREATE TABLE. См. Раздел 15.1.20.6 «Ограничения CHECK». -
Удалить существующее ограничение
CHECKс именемsymbol:ALTER TABLE
tbl_nameDROP CHECKsymbol; -
Изменить, выполняется ли существующее ограничение
CHECKс именемsymbol:ALTER TABLE
tbl_nameALTER CHECKsymbol[NOT] ENFORCED;
Клаузы DROP CHECK и ALTER
CHECK являются расширениями MySQL для стандартного SQL.
ALTER TABLE допускает более общий (и стандартный для SQL) синтаксис для удаления и изменения существующих ограничений любого типа, где тип ограничения определяется по имени ограничения:
-
Удалить существующее ограничение с именем
symbol:ALTER TABLE
tbl_nameDROP CONSTRAINTsymbol;Если системная переменная
sql_require_primary_keyвключена, попытка удалить первичный ключ приведет к ошибке. -
Изменить, выполняется ли существующее ограничение с именем
symbol:ALTER TABLE
tbl_nameALTER CONSTRAINTsymbol[NOT] ENFORCED;Только
CHECKограничения могут быть изменены на невыполняемые. Все остальные типы ограничений всегда выполняются.
Стандарт SQL определяет, что все типы ограничений (первичный ключ, уникальный индекс, внешний ключ, проверка) относятся к одному и тому же пространству имен. В MySQL каждый тип ограничения имеет собственное пространство имен в рамках схемы. Следовательно, имена каждого типа ограничения должны быть уникальными в рамках схемы, но ограничения разных типов могут иметь одинаковое имя. Когда несколько ограничений имеют одинаковое имя, DROP CONSTRAINT и ADD
CONSTRAINT являются неоднозначными и возникает ошибка. В таких случаях необходимо использовать синтаксис, специфичный для ограничения, для изменения ограничения. Например, используйте DROP PRIMARY KEY или DROP FOREIGN KEY для удаления первичного или внешнего ключа.
Если изменение таблицы приводит к нарушению примененного CHECK ограничения, возникает ошибка, и таблица не изменяется. Примеры операций, при которых возникает ошибка:
Попытка добавить атрибут
AUTO_INCREMENTк столбцу, используемому вCHECKограничении.Попытка добавить применимое
CHECKограничение или применить невыполняемоеCHECKограничение, для которого существующие строки нарушают условие ограничения.Попытка изменить, переименовать или удалить столбец, используемый в
CHECKограничении, если это ограничение не удалено в том же операторе. Исключение: еслиCHECKограничение относится только к одному столбцу, удаление столбца автоматически удаляет ограничение.
ALTER TABLE изменяет сгенерированные внутренне и определенные пользователем имена ограничений tbl_name RENAME
new_tbl_nameCHECK, начинающиеся со строки “tbl_name_chk_”, чтобы отразить новое имя таблицы. MySQL интерпретирует имена ограничений CHECK, начинающиеся со строки “tbl_name_chk_”, как сгенерированные внутренне.
Изменение кодировки символов
Чтобы изменить кодировку символов таблицы по умолчанию и все символьные столбцы (CHAR, VARCHAR, TEXT) на новую кодировку, используйте оператор подобный этому:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;
Оператор также изменяет порядок сортировки всех символьных столбцов. Если вы не указали клаузу COLLATE, чтобы указать порядок сортировки, оператор использует порядок сортировки по умолчанию для кодировки символов. Если этот порядок сортировки не подходит для предполагаемого использования таблицы (например, если бы он изменился с чувствительной к регистру сортировки на нечувствительную к регистру), укажите порядок сортировки явно.
Для столбца с типом данных VARCHAR или одним из типов TEXT, CONVERT TO
CHARACTER SET изменяет тип данных по мере необходимости, чтобы новый столбец был достаточно длинным для хранения столько же символов, сколько и исходный столбец. Например, столбец TEXT имеет два байта длины, которые хранят длину значений в столбце, до максимального значения 65 535. Для столбца latin1 TEXT, каждый символ требует одного байта, поэтому столбец может хранить до 65 535 символов. Если столбец преобразуется в utf8mb4, каждый символ может потребовать до 4 байтов, с максимальной возможной длиной 4 × 65 535 = 262 140 байтов. Эта длина не помещается в байты длины столбца TEXT, поэтому MySQL преобразует тип данных в MEDIUMTEXT, который является наименьшим типом строки, для которого байты длины могут записать значение 262 140. Аналогично, столбец VARCHAR может быть преобразован в MEDIUMTEXT.
Чтобы избежать изменений типа данных такого типа, не используйте CONVERT TO CHARACTER SET. Вместо этого используйте MODIFY для изменения отдельных столбцов. Например:
ALTER TABLE t MODIFY latin1_text_col TEXT CHARACTER SET utf8mb4;
ALTER TABLE t MODIFY latin1_varchar_col VARCHAR(M) CHARACTER SET utf8mb4;
Если вы укажете CONVERT TO CHARACTER SET binary, столбцы CHAR, VARCHAR и TEXT преобразуются в соответствующие двоичные строковые типы (BINARY, VARBINARY, BLOB). Это означает, что у столбцов больше нет набора символов, и к ним не применяется последующая операция CONVERT
TO.
Если charset_name используется в операции DEFAULT в рамках операции CONVERT TO CHARACTER
SET, используется набор символов, указанный в переменной системы character_set_database.
Операция CONVERT TO преобразует значения столбцов между исходным и указанным наборами символов. Это не то, что вам нужно, если у вас есть столбец в одном наборе символов (например, latin1), но хранящиеся значения фактически используют другой, несовместимый набор символов (например, utf8mb4). В этом случае для каждого такого столбца необходимо выполнить следующее:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8mb4;
Причина, по которой это работает, заключается в том, что преобразования не происходят при преобразовании в или из столбцов BLOB.
Чтобы изменить только по умолчанию набор символов таблицы, используйте это утверждение:
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;
Слово DEFAULT является необязательным. Набор символов по умолчанию — это набор символов, который используется, если вы не указываете набор символов для столбцов, которые вы добавляете в таблицу позже (например, с помощью ALTER TABLE ... ADD
column).
При включенной переменной системы foreign_key_checks, что является значением по умолчанию, преобразование набора символов запрещено для таблиц, которые включают строковый столбец, используемый в ограничении внешнего ключа. Решение — отключить foreign_key_checks перед выполнением преобразования набора символов. Необходимо выполнить преобразование для обеих таблиц, участвующих во внешнем ключе, прежде чем повторно включить foreign_key_checks. Если вы повторно включите foreign_key_checks после преобразования только одной из таблиц, операция ON DELETE
CASCADE или ON UPDATE CASCADE может привести к повреждению данных в таблице-наследнице из-за неявного преобразования, которое происходит во время этих операций (Ошибка #45290, Ошибка #74816).
Импорт таблиц InnoDB
Таблица InnoDB, созданная в собственном табличном пространстве, может быть импортирована из резервной копии или из другого экземпляра сервера MySQL с помощью DISCARD TABLEPACE и IMPORT TABLESPACE. См. Раздел 17.6.1.3, «Импорт таблиц InnoDB».
Порядок строк для таблиц MyISAM
ORDER BY позволяет создавать новую таблицу со строками в определенном порядке. Этот параметр полезен в первую очередь, когда известно, что строки чаще всего запрашиваются в определенном порядке. Используя этот параметр после крупных изменений в таблице, вы можете повысить производительность. В некоторых случаях это может упростить сортировку для MySQL, если таблица отсортирована по столбцу, по которому вы хотите отсортировать ее позже.
После вставки и удаления таблица не сохраняется в указанном порядке.
Синтаксис ORDER BY позволяет указать одно или несколько имен столбцов для сортировки, каждое из которых необязательно может быть дополнено ASC или DESC для указания возрастающего или убывающего порядка сортировки соответственно. По умолчанию используется возрастающий порядок. В качестве критериев сортировки разрешены только имена столбцов; произвольные выражения не допускаются. Этот пункт должен быть указан последним после всех других пунктов.
ORDER BY не имеет смысла для таблиц InnoDB, потому что InnoDB всегда упорядочивает строки таблицы в соответствии с .
При использовании на разбиении таблицы ALTER TABLE ... ORDER
BY упорядочивает строки только внутри каждого разбиения.
Параметры разбиения
partition_options обозначает параметры, которые могут использоваться с разбиением таблиц для перераспределения, добавления, удаления, удаления, импорта, слияния и разделения разбиений и выполнения задач по обслуживанию разбиений.
Утверждение ALTER TABLE может содержать пункты PARTITION BY или REMOVE PARTITIONING в дополнение к другим спецификациям изменения, но пункты PARTITION
BY или REMOVE PARTITIONING должны быть указаны последними после любых других спецификаций. Параметры ADD
PARTITION, DROP PARTITION, DISCARD PARTITION, IMPORT
PARTITION, COALESCE PARTITION, REORGANIZE PARTITION, EXCHANGE
PARTITION, ANALYZE PARTITION, CHECK PARTITION и REPAIR
PARTITION нельзя объединять с другими спецификациями изменения в одном ALTER TABLE, так как перечисленные параметры действуют только на отдельные разбиения.
Дополнительную информацию о параметрах разбиения см. в Разделе 15.1.20, «Утверждение CREATE TABLE» и Разделе 15.1.9.1, «Операции ALTER TABLE для разбиения». Сведения о заявлениях ALTER TABLE ...
EXCHANGE PARTITION и примеры см. в Разделе 26.3.3, «Обмен разбиениями и подразбиениями с таблицами».
© 2025 Oracle
Licensed under the GPLv2 License.