Вставить новые столбцы в середине таблицы? - PullRequest
7 голосов
/ 16 ноября 2009

Когда используется вкладка «ALTER TABLE ADD col», новый столбец добавляется в конец таблицы. Например:

TABLE: TAB
COL_1 COL_2 COL_4

ALTER TABLE TAB ADD COL_3

стол станет

TABLE: TAB
COL_1 COL_2 COL_4 COL_3

Однако, как показывает название столбцов моего примера, я бы действительно хотел, чтобы таблица заканчивалась так:

TABLE: TAB
COL_1 COL_2 COL_3 COL_4 

С COL_3 до COL_4.

Помимо восстановления таблицы с нуля, есть ли какой-нибудь стандартный SQL, который справится с работой? Однако, если нет стандартного SQL, я все равно мог бы использовать некоторые решения, зависящие от поставщика, для Oracle, но опять-таки стандартное решение было бы лучше.

Спасибо.

Ответы [ 5 ]

12 голосов
/ 16 ноября 2009

По умолчанию столбцы добавляются только в конце.

Чтобы вставить столбец посередине, вам нужно удалить и заново создать таблицу и все связанные объекты (ограничения, индексы, значения по умолчанию, отношения и т. Д.).

Несколько инструментов делают это за вас, и в зависимости от размера таблицы это может быть интенсивной операцией.

Вы можете также рассмотреть возможность создания представлений в таблице, которые отображают столбцы в порядке предпочтения (переопределяя фактический порядок в таблице).

5 голосов
/ 21 января 2015

Работает.

ALTER TABLE tablename ADD columnname datatype AFTER columnname;
2 голосов
/ 16 ноября 2009

ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME ПОЛОЖЕНИЕ X;

2 голосов
/ 16 ноября 2009

http://www.orafaq.com/wiki/SQL_FAQ#How_does_one_add_a_column_to_the_middle_of_a_table.3F говорит, что это невозможно, и предлагает обходные пути переименования таблицы и выполнения create table as select... или (что-то, с чем я не знаком): «Используйте пакет DBMS_REDEFINITION, чтобы изменить структуру».

1 голос
/ 10 июня 2014

Я знаю, что это старая тема (2009), но, возможно, это поможет кому-то, кто все еще ищет ответ. В MySQL, это работает 2 добавить столбец в любом месте таблицы.

ALTER TABLE `tablename` ADD `column_name1` TEXT NOT NULL AFTER `column_name2`;

Это 2 введите текстовый столбец, но вы можете установить любые свойства, которые вы хотите для нового столбца, просто убедитесь, что вы пишете их заглавными буквами.

Я нашел его с помощью Xampp, администратора MySQL, когда я использовал его 2, вставив столбец в середину таблицы MySQL.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...