Как написать Alter Table и добавить новые столбцы? - PullRequest
0 голосов
/ 19 июля 2011

У меня есть таблица с 3 столбцами A, B, C, в которой также есть строки. Столбец А является первичным ключом.

Теперь, согласно новому требованию, мне нужно добавить новые столбцы D, E и F.

Также мне нужно удалить предыдущий первичный ключ из столбца A и добавить новый первичный ключ для столбца D.

Столбец E и F равен NULL.

Пожалуйста, помогите мне создать оператор alter table.

1 Ответ

11 голосов
/ 19 июля 2011

Что вам нужно, это многошаговый процесс. Добавление столбцов, удаление существующего ограничения первичного ключа и, наконец, добавление нового.

Самым сложным здесь является добавление столбца D. Поскольку вы хотите, чтобы он был новым первичным ключом, он должен быть NOT NULL. Если в вашей таблице уже есть данные, вам нужно обработать эту ошибку:

SQL> alter table your_table
  2     add ( d number not null
  3           , e date
  4           , f number )
  5  /
alter table your_table
            *
ERROR at line 1:
ORA-01758: table must be empty to add mandatory (NOT NULL) column


SQL>

Итак, шаг 1 - добавить новые столбцы с D необязательно; затем заполните его значениями ключа:

SQL> alter table your_table
  2     add ( d number
  3           , e date
  4           , f number )
  5  /

Table altered.

SQL> update your_table
  2      set d = rownum
  3  /

1 row updated.

SQL>

Теперь мы можем сделать столбец D обязательным:

SQL> alter table your_table
  2     modify d not null
  3  /

Table altered.

SQL>

Наконец, мы можем изменить столбец первичного ключа с A на D:

SQL> alter table your_table
  2      drop primary key
  3  /

Table altered.

SQL> alter table your_table
  2     add constraint yt_pk primary key (d)
  3  /

Table altered.

SQL>

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

alter table your_table
add new_col varchar2(1) default 'N' not null;

В более поздних версиях Oracle это на самом деле чрезвычайно эффективно заполнять новый столбец тем же значением, значительно быстрее, чем описанный выше многошаговый подход.


В случае, если неясно, приведенный выше синтаксис - Oracle. Я ожидаю, что SQL Server будет чем-то похожим.

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