Spec-Zone.ru › MySQL 5.7

B.3.6.1 Проблемы с ALTER TABLE

Если при использовании ALTER TABLE для изменения набора символов или сортировки символьного столбца возникает ошибка дублирования ключа, причиной может быть либо то, что новая сортировка столбца отображает два ключа в одно значение, либо таблица повреждена. В последнем случае следует запустить REPAIR TABLE для таблицы. REPAIR TABLE работает для таблиц MyISAM, ARCHIVE и CSV.

Если ALTER TABLE завершается с ошибкой, приведенной ниже, проблема может заключаться в том, что MySQL аварийно завершил работу во время предыдущей операции ALTER TABLE, и в системе присутствуют старая таблица с именем A-xxx или B-xxx:

Error on rename of './database/name.frm'
to './database/B-xxx.frm' (Errcode: 17)

В этом случае перейдите в каталог данных MySQL и удалите все файлы, имена которых начинаются с A- или B-. (Вместо удаления вы можете переместить их в другое место.)

ALTER TABLE работает следующим образом:

  • Создать новую таблицу с именем A-xxx с запрошенными изменениями структуры.

  • Скопировать все строки из исходной таблицы в A-xxx.

  • Переименовать исходную таблицу в B-xxx.

  • Переименовать A-xxx в исходное имя таблицы.

  • Удалить B-xxx.

Если при операции переименования произойдет ошибка, MySQL попытается отменить изменения. Если произойдет серьезная ошибка (хотя этого не должно происходить), MySQL может оставить старую таблицу в состоянии B-xxx. Простое переименование файлов таблицы на системном уровне должно восстановить ваши данные.

Если вы используете ALTER TABLE для транзакционной таблицы или если вы используете Windows, ALTER TABLE разблокирует таблицу, если вы использовали LOCK TABLE. Это делается потому, что InnoDB и эти операционные системы не могут удалить таблицу, которая используется.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/alter-table-problems.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API