Поменять поля в таблице местами

Есть ли возможность изменить очередь расположения полей в таблице ?
Или если стандартных средств нет, то как проще это сделать ?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А можно узнать зачем? Ведь

А можно узнать зачем?
Ведь порядок колонок, как и порядок таблиц неважен в 99% случаев.

Существует и практическое применение

Очень уж такой необходимости нет.
Скорее ради удобства, к примеру в том же phppgamdin при большом колличестве полей мне удобно сверху делать ключевые поля, потом контент и всё что с ним связанно, далее время boolean поля и т.п.

Но существует и практическое применение. Скажем при использовании web фрэймворков. Во многих из них для вывода полей (форма редактирования) используется структура самой таблицы, то есть если поле типа varchar то input если text то textarea timestamp ..., соответственно последовательность тоже сохраняется. И скажем я использую такую схему в админ части сайта. При редактировании странички у меня title varchar(40), content text, is_active boolean, time timestamp, ...
И тут я решил добавить новое поле content_prev text, удобнее всего для пользователя видеть это поле между title и content, но оно окажется в самом конце.

Ясно, хотя всегда считал, что

Ясно, хотя всегда считал, что лучше перечислить поля чем делать *, если по какой-либо причине на выходе важен их порядок.

Могу посоветовать такой рецепт.

ALTER TABLE таблица ADD COLUMN ...

после чего нужная колонка добавится в конце как вы и написали. А дальше
CREATE TABLE tmp AS SELECT <перечень полей таблицы в нужном порядке> FROM исходная_таблица
DROP TABLE исходная_таблица
ALTER TABLE tmp RENAME TO исходная таблица

Синтаксис уточните, мог ошибиться.
Разумеется если при этом были триггеры или индексы - придётся пересоздавать.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023