Связь и интернет Архив Программирование
   
Сделать стартовойСделать закладку            
   ПОИСК  
   
Главная / MySQL / Проблемы и распространенные ошибки /
8  Perl
8  PHP
8  JavaScript
8  HTML
8  DHTML
8  XML
8  CSS
8  C / C++
8  Pascal и Delphi
8  Турбо Ассемблер
8  MySQL
8  CASE-технологии
8  Алгоритмы
8  Python
8  Обратная связь
8  Гостевая книга
Новости о мире


Вопросы, связанные с определением таблиц - Программирование от RIN.RU
Вопросы, связанные с определением таблиц




Проблемы с 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 * и извлекать столбцы, полагаясь на их позиции, поскольку порядок, в котором возвращаются столбцы, не может быть гарантирован. Простое изменение в базе данных может катастрофически сказаться на поведении приложения.


Если порядок столбцов все-таки требуется изменить, то сделать это можно следующим образом:


  1. Создайте новую таблицу со столбцами в правильном порядке.

  2. Выполните INSERT INTO new_table SELECT поля-в-желаемом-порядке FROM old_table.

  3. Удалите или переименуйте old_table.

  4. 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  Обсудить в чате

8  В тему

Как определить, чем вызваны проблемы

Распространенные ошибки при использовании MySQL

Вопросы, связанные с инсталляцией

Вопросы, связанные с администрированием

Проблемы, относящиеся к запросам

 
  
  
    Copyright ©  RIN 2003 - 2004      * Обратная связь