# Главная
# О библиотеке

# Выбор дистрибутива
преимущества Linux/UNIX | основные дистрибутивы | серверный Linux | BSD | LiveCDs | прочее

# Установка и удаление программ
общие вопросы | каталоги софта | специальные случаи

# Настройка и работа
установка, загрузчики | настройка Linux | консоль | файловые системы | процессы | шеллы, русификация, коммандеры | виртуальные машины, эмуляторы

# X Window и оконные менеджеры
настройка X Window | GNOME | KDE | IceWM и др.

# Работа с текстами
редакторы | офис | шрифты, кодировки и русификация | преобразования текстовых файлов | LaTeX, SGML и др. | словари

# Графика
GIMP | фото | обработка изображений | форматы графических файлов

# Сети, администрирование
общие вопросы | Dialup & PPP | брандмауэры | маршрутизация | работа в Windows-сетях | веб-серверы | Apache | прокси-серверы | сетевая печать | прочее

# Программирование
GCC & GNU make | программирование в UNIX | графические библиотеки | Tcl | Perl | PHP | Java & C# | СУБД | CVS | прочее

# Ядро
# Мультимедиа
# Интернет
# Почта
# Безопасность
# Железо
# Разное

# Linux HowTo (как сделать)
# Книги и руководства
# Материалы на английском языке


MySQL The World's Most Popular Open Source Database # Online shop | Site map |  
CompanyProductsSupport & ConsultingTraining & CertificationDownloadsDocumentation
  BooksArticlesMailing ListsPresentationsOther Sites  
Search the MySQL manual:
MySQL Manual
  • A Проблемы и распространенные ошибки
    • A.6 Вопросы, связанные с определением таблиц
      • A.6.1 Проблемы с ALTER TABLE
      • A.6.2 Как изменить порядок столбцов в таблице
      • A.6.3 Проблемы, относящиеся к временным (TEMPORARY) таблицам

Buy this Reference Manual in softcover from Barnes & Noble!

MySQL Reference Manual
Previous / Next / Up / Table of Contents

A.6.2 Как изменить порядок столбцов в таблице

Основная идея 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.

User Comments

Posted by Alexander Passmoore on Saturday October 26 2002, @7:18pm[Delete] [Edit]

"You should never, in an application, use SELECT
* and retrieve the columns based on their position"

--I disagree. There are some apps where users
create their own tables via a web interface. You
might give them the chance to customize the column
sequence. It's a lot more complicated to keep
track of their sequence-preference and apply it at
query-time every time. -the app will be less
resource-intensive if the user changes his
sequence ONCE.

Posted by Chris Caldwell on Sunday November 10 2002, @7:11am[Delete] [Edit]

The manual states "the order in which columns are
returned cannot be guaranteed over time", but at
the same time the only TIMESTAMP column
automatically updated by MYSQL is the first. This
seems to imply that the first TIMESTAMP will remain
the first.

Posted by [name withheld] on Thursday February 20 2003, @1:13pm[Delete] [Edit]

This seems like a scary way to reorder a table, especially if you have multiple programs accessing the data simultaneously. Isn't there a better way?

Add your own comment.

Top / Previous / Next / Up / Table of Contents
# MySQL.com home | Site map | Contact us | Press | Jobs | Privacy policy | Trademark info | © 1995-2003 MySQL AB. All rights reserved.