Лекция
Это продолжение увлекательной статьи про alter table.
...
153, 153); font-size:12.8304px">) | 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 CHECK (expr) | ALGORITHM [=] {DEFAULT | INPLACE | COPY} | ALTER [COLUMN] col_name { SET DEFAULT {literal | (expr)} | DROP DEFAULT } | 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 {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 | UPGRADE PARTITIONING } key_part: 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] ... table_option: { 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 | 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} | 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
изменяет структуру таблицы. Об этом говорит сайт https://intellect.icu . Например, вы можете добавлять или удалять столбцы, создавать или уничтожать индексы, изменять тип существующих столбцов или переименовывать столбцы или саму таблицу. Вы также можете изменить такие характеристики, как механизм хранения, используемый для таблицы или комментария к таблице.
Для использования ALTER TABLE
, вам нужно ALTER
, CREATE
и INSERT
привилегии для таблицы. Переименование таблицы требует ALTER
и DROP
на старом таблице ALTER
, CREATE
и INSERT
на новом таблице .
После имени таблицы укажите вносимые изменения. Если ничего не дано, ALTER TABLE
ничего не делает.
Синтаксис многих допустимых изменений аналогичен положениям CREATE TABLE
инструкции. column_definition
в предложениях используется тот же синтаксис, что ADD
и CHANGE
для CREATE TABLE
. Для получения дополнительной информации см. Раздел 13.1.18, «Оператор CREATE TABLE» .
Слово COLUMN
является необязательным и может быть опущено.
Множественное ADD
, ALTER
, DROP
и CHANGE
положение разрешается в одном ALTER TABLE
заявлении, разделенные запятыми. Это расширение MySQL для стандартного SQL, которое допускает только одно из каждого предложения для каждого ALTER TABLE
оператора. Например, чтобы удалить несколько столбцов в одном операторе, сделайте следующее:
ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;
Если подсистема хранения не поддерживает предпринятую ALTER TABLE
операцию, может появиться предупреждение. Такие предупреждения могут отображаться с помощью SHOW WARNINGS
. См. Раздел 13.7.5.40, «ПОКАЗАТЬ ПРЕДУПРЕЖДЕНИЯ» . Для получения информации об устранении неполадок ALTER TABLE
см. Раздел B.3.6.1, «Проблемы с ALTER TABLE» .
Для получения информации о сгенерированных столбцах см. Раздел 13.1.8.2, «ALTER TABLE и сгенерированные столбцы » .
Примеры использования см. В Раздел 13.1.8.3, «Примеры ALTER TABLE» .
С помощью mysql_info()
функции C API вы можете узнать, сколько строк было скопировано ALTER TABLE
. См. Mysql_info () .
К ALTER TABLE
заявлению относятся несколько дополнительных аспектов , описанных в следующих разделах этого раздела:
Параметры таблицы
Требования к производительности и пространству
Контроль параллелизма
Добавление и удаление столбцов
Переименование, переопределение и изменение порядка столбцов
Первичные ключи и индексы
Внешние ключи и другие ограничения
Изменение набора символов
Отказ от и импорт табличных пространств InnoDB
Порядок строк для таблиц MyISAM
Параметры разбиения
table_options
Значит варианты табличных родов , которые могут быть использованы в CREATE TABLE
заявлении, такие как ENGINE
, AUTO_INCREMENT
, AVG_ROW_LENGTH
, MAX_ROWS
, ROW_FORMAT
, или TABLESPACE
.
Описание всех опций таблицы см. В Раздел 13.1.18, «Оператор CREATE TABLE» . Однако ALTER TABLE
игнорирует DATA DIRECTORY
и, INDEX DIRECTORY
если указано в качестве параметров таблицы. ALTER TABLE
разрешает их только как опции разделения и, начиная с MySQL 5.7.17, требует, чтобы у вас была такая FILE
привилегия.
Использование параметров таблицы с ALTER TABLE
предоставляет удобный способ изменения характеристик отдельной таблицы. Например:
Если t1
в настоящее время это не InnoDB
таблица, этот оператор изменяет свой механизм хранения на InnoDB
:
ALTER TABLE t1 ENGINE = InnoDB;
См. Раздел 14.6.1.5, «Преобразование таблиц из MyISAM в InnoDB», чтобы узнать о том, как переключать таблицы на InnoDB
механизм хранения.
Когда вы указываете ENGINE
предложение, ALTER TABLE
перестраивает таблицу. Это верно, даже если таблица уже имеет указанный механизм хранения.
При запуске в существующей таблице выполняется « нулевая » операция, которую можно использовать для дефрагментации таблицы, как описано в Раздел 14.12.4, «Дефрагментация таблицы» . Выполнение на таблице выполняет ту же функцию. ALTER TABLE
tbl_name
ENGINE=INNODBInnoDB
ALTER TABLE
InnoDB
ALTER TABLE
tbl_name
FORCEInnoDB
ALTER TABLE
и используйте онлайн-DDL . Для получения дополнительной информации см. Раздел 14.13, «InnoDB и онлайн-DDL» . tbl_name
ENGINE=INNODBALTER TABLE
tbl_name
FORCE
Результат попытки изменить механизм хранения таблицы зависит от того, доступен ли желаемый механизм хранения и от настройки режима NO_ENGINE_SUBSTITUTION
SQL, как описано в Раздел 5.1.10, «Режимы SQL сервера» .
Чтобы предотвратить непреднамеренную потерю данных, ALTER TABLE
нельзя использовать для изменения механизма хранения таблицы на MERGE
или BLACKHOLE
.
Чтобы изменить InnoDB
таблицу для использования сжатого формата хранения строк:
ALTER TABLE t1 ROW_FORMAT = COMPRESSED;
Чтобы включить или отключить шифрование для InnoDB
таблицы в табличном пространстве "файл на таблицу":
ALTER TABLE t1 ENCRYPTION='Y';
ALTER TABLE t1 ENCRYPTION='N';
Для использования этой ENCRYPTION
опции необходимо установить и настроить подключаемый модуль связки ключей . Для получения дополнительной информации см. Раздел 14.14, «Шифрование данных в состоянии покоя InnoDB» .
Чтобы сбросить текущее значение автоинкремента:
ALTER TABLE t1 AUTO_INCREMENT = 13;
Вы не можете сбросить счетчик на значение, меньшее или равное текущему значению. Для обоих InnoDB
и MyISAM
, если значение меньше или равно максимальному значению в данный момент в AUTO_INCREMENT
столбце, значение сбрасывается до текущего максимального AUTO_INCREMENT
значения столбца плюс один.
Чтобы изменить набор символов таблицы по умолчанию:
ALTER TABLE t1 CHARACTER SET = utf8;
См. Также Изменение набора символов .
Чтобы добавить (или изменить) комментарий к таблице:
ALTER TABLE t1 COMMENT = 'New table comment';
Используйте ALTER TABLE
с TABLESPACE
опцией для перемещения InnoDB
таблиц между существующими общими табличными пространствами , табличными пространствами файлов на таблицу и системным табличным пространством . См.
продолжение следует...
Часть 1 Проблемы ALTER TABLE тормозит база данных Mysql и варианты решения
Часть 2 Параметры таблицы - Проблемы ALTER TABLE тормозит база данных Mysql
Часть 3 Требования к производительности и пространству - Проблемы ALTER TABLE тормозит
Часть 4 Отказ от и импорт табличных пространств InnoDB - Проблемы ALTER
Комментарии
Оставить комментарий
Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL
Термины: Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL