Лекция
Это окончание невероятной информации про alter table.
...
сопоставление использовать, оператор использует сопоставление по умолчанию для набора символов. Если это сопоставление не подходит для предполагаемого использования таблицы (например, если оно изменится с сопоставления с учетом регистра на сопоставление без учета регистра), укажите сопоставление явно.
Для столбца, который имеет тип данных VARCHAR
или один из TEXT
типов, при необходимости CONVERT TO CHARACTER SET
изменяет тип данных, чтобы гарантировать, что новый столбец будет достаточно длинным для хранения такого же количества символов, как и исходный столбец. Например, TEXT
столбец имеет два байта длины, в которых хранится длина значений в столбце до максимального значения 65 535 байтов. Для latin1
TEXT
столбца для каждого символа требуется один байт, поэтому столбец может хранить до 65 535 символов. Если столбец преобразован в utf8
, для каждого символа может потребоваться до трех байтов для максимально возможной длины 3 × 65 535 = 196 605 байтов. Эта длина не помещается в TEXT
байтах длины столбца, поэтому MySQL преобразует тип данных в MEDIUMTEXT
, который является наименьшим строковым типом, для которого в байтах длины может быть записано значение 196 605. Точно так же VARCHAR
столбец можно преобразовать в MEDIUMTEXT
.
Чтобы избежать изменений типа данных только что описанного типа, не используйте CONVERT TO CHARACTER SET
. Вместо этого используйте MODIFY
для изменения отдельных столбцов. Например:
ALTER TABLE t MODIFY latin1_text_col TEXT CHARACTER SET utf8;
ALTER TABLE t MODIFY latin1_varchar_col VARCHAR(M) CHARACTER SET utf8;
Если указать 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
), но сохраненные значения фактически используют какой-то другой, несовместимый набор символов (например utf8
). В этом случае для каждого такого столбца необходимо сделать следующее:
ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8;
Причина, по которой это работает, заключается в том, что при преобразовании в 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
Таблица , созданная в своем файловом каждой таблицу табличного может быть импортирована из резервной копии или из другого экземпляра сервера MySQL с использованием DISCARD TABLEPACE
и IMPORT TABLESPACE
статьями. См. Раздел 14.6.1.3, «Импорт таблиц InnoDB» .
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
, так как варианты только перечисленные действуют на отдельных разделах.
Для получения дополнительной информации о параметрах раздела см. Раздел 13.1.18, «Оператор CREATE TABLE» и Раздел 13.1.8.1, «Операции с разделением ALTER TABLE» . Для получения информации и примеров ALTER TABLE ... EXCHANGE PARTITION
операторов см. Раздел 22.3.3, «Обмен разделами и подразделами с таблицами» .
До MySQL 5.7.6 в секционированных InnoDB
таблицах использовался общий ha_partition
обработчик секционирования, используемый MyISAM
и другими механизмами хранения, не предоставляющими свои собственные обработчики секционирования; в MySQL 5.7.6 и более поздних версиях такие таблицы создаются с использованием InnoDB
собственного (или « собственного » ) обработчика секционирования подсистемы хранения . Начиная с MySQL 5.7.9, вы можете обновить InnoDB
таблицу, созданную в MySQL 5.7.6 или ранее (то есть созданную с помощью ha_partition
), до InnoDB
собственного обработчика разделов, используя ALTER TABLE ... UPGRADE PARTITIONING
. (Ошибка № 76734, Ошибка № 20727344) Этот ALTER TABLE
синтаксис не допускает никаких других параметров и может использоваться только для одной таблицы за раз. Вы также можете использовать mysql_upgrade в MySQL 5.7.9 или новее для обновления старых секционированныхтаблиц InnoDB до собственного обработчика секционирования
Дополнительно читайте
https://github.com/github/gh-ost
https://www.facebook.com/notes/10157508558976696/
Данная статья про alter table подтверждают значимость применения современных методик для изучения данных проблем. Надеюсь, что теперь ты понял что такое alter table и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL
Часть 1 Проблемы ALTER TABLE тормозит база данных Mysql и варианты решения
Часть 2 Параметры таблицы - Проблемы ALTER TABLE тормозит база данных Mysql
Часть 3 Требования к производительности и пространству - Проблемы ALTER TABLE тормозит
Часть 4 Отказ от и импорт табличных пространств InnoDB - Проблемы ALTER
Комментарии
Оставить комментарий
Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL
Термины: Базы данных, знаний и хранилища данных. Big data, СУБД и SQL и noSQL