ALTER TABLE
изменяет таблицу в соответствии с текущей кодировкой. Если при
выполнении ALTER TABLE
выдается ошибка дублирующегося ключа, то причина
либо в том, что новая кодировка отображает ключи в одинаковые значения,
либо в том, что таблица повреждена. В последнем случае на таблице
необходимо выполнить REPAIR TABLE
.
Если работа ALTER TABLE
прекращается с ошибкой, подобной приведенной ниже:
Error on rename of './database/name.frm' to './database/B-a.frm' (Errcode: 17)
то проблема может быть связана с тем, что MySQL аварийно завершился на
предыдущей команде ALTER TABLE
и осталась старая таблица с именем
A-что_нибудь
или B-что_нибудь
. В этом случае перейдите в каталог
данных MySQL и удалите все файлы, имена которых начинаются с A-
или B-
(их
можно и не удалять, а куда-либо переместить).
ALTER TABLE
работает следующим образом:
Создается новая таблица с именем
A-xxx
с заданными в запросе изменениями.Все строки старой таблицы копируются в
A-xxx
.Старая таблица переименовывается в
B-xxx
.A-xxx
переименовывается в имя старой таблицы.Удаляется
B-xxx
.
Если что-то приключится при операции переименования, MySQL попытается
отменить изменения. Если случится что-то серьезное (чего произойти,
конечно, не должно), MySQL может оставить старую таблицу именованной как
B-xxx
- в этом случае, однако, для восстановления данных достаточно будет
просто переименовать ее на системном уровне.