Проблемы с ALTER TABLE
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' - в этом случае, однако, для восстановления данных достаточно будет просто переименовать ее на системном уровне.
Как изменить порядок столбцов в таблице
Основная идея SQL заключается в том, чтобы разделить приложения и формат хранения данных. Всегда следует указывать порядок извлечения данных, например:
SELECT col_name1, col_name2, col_name3 FROM tbl_name;
возвратит столбцы в порядке col_name1, col_name2, col_name3 , тогда как:
SELECT col_name1, col_name3, col_name2 FROM tbl_name;
возвратит столбцы в порядке col_name1, col_name3, col_name2 .
В приложения никогда нельзя использовать SELECT * и извлекать столбцы, полагаясь на их позиции, поскольку порядок, в котором возвращаются столбцы, не может быть гарантирован. Простое изменение в базе данных может катастрофически сказаться на поведении приложения.
Если порядок столбцов все-таки требуется изменить, то сделать это можно следующим образом:
Создайте новую таблицу со столбцами в правильном порядке.
Выполните INSERT INTO new_table SELECT поля-в-желаемом-порядке FROM old_table .
Удалите или переименуйте old_table .
ALTER TABLE new_table RENAME old_table .
Проблемы, относящиеся к временным (TEMPORARY) таблицам
Ниже перечислены ограничения, относящиеся к временным таблицам.
Временной может быть только таблица типа HEAP , ISAM , MyISAM или InnoDB .
Временная таблица не может использоваться в одном запросе более одного раза. Например, следующий запрос работать не будет.
mysql> SELECT * FROM temporary_table, temporary_table AS t2;
Мы планируем устранить эту проблему в версии 4.0.
Нельзя использовать RENAME на таблице с атрибутом TEMPORARY . Отметим, однако, что ALTER TABLE оригинальное_имя RENAME новое_имя работает! Данное ограничение мы планируем устранить в 4.0.
8 8 8
| |