Подтвердить что ты не робот

Изменить таблицу для изменения значения по умолчанию для столбца

У меня есть требование, когда нам нужно изменить значение по умолчанию для столбца в таблице базы данных. Таблица уже является существующей таблицей в базе данных, и в настоящее время значение по умолчанию для столбца равно NULL. Теперь, если добавить новый значение по умолчанию в этот столбец, если я прав, он обновит все существующие NULL столбца до нового значения DEfault. Есть ли способ не делать этого, но все же установить новое значение по умолчанию для столбца. Я имею в виду, что я не хочу обновлять существующие NULL и хочу, чтобы они оставались как NULL.

Любая помощь по этому поводу ценится. Благодаря

4b9b3361

Ответ 1

Ваша вера в то, что произойдет, неверна. Установка значения по умолчанию для столбца не повлияет на существующие данные в таблице.

Я создаю таблицу со столбцом col2, который не имеет значения по умолчанию

SQL> create table foo(
  2    col1 number primary key,
  3    col2 varchar2(10)
  4  );

Table created.

SQL> insert into foo( col1 ) values (1);

1 row created.

SQL> insert into foo( col1 ) values (2);

1 row created.

SQL> insert into foo( col1 ) values (3);

1 row created.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3

Если я изменил таблицу для установки значения по умолчанию, ничего из существующих строк не изменится

SQL> alter table foo
  2    modify( col2 varchar2(10) default 'foo' );

Table altered.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3

SQL> insert into foo( col1 ) values (4);

1 row created.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3
         4 foo

Даже если я впоследствии снова изменим значение по умолчанию, изменений в существующих строках не будет [

SQL> alter table foo
  2    modify( col2 varchar2(10) default 'bar' );

Table altered.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3
         4 foo

SQL> insert into foo( col1 ) values (5);

1 row created.

SQL> select * from foo;

      COL1 COL2
---------- ----------
         1
         2
         3
         4 foo
         5 bar

Ответ 2

ALTER TABLE {TABLE NAME}
ALTER COLUMN {COLUMN NAME} SET DEFAULT '{DEFAULT VALUES}'

пример:

ALTER TABLE RESULT
ALTER COLUMN STATUS SET DEFAULT 'FAIL'

Ответ 3

Следуя примеру Джастина, команда ниже работает в Postgres:

alter table foo alter column col2 set default 'bar';