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

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

Любая помощь в этом приветствуется. Спасибо


person ravi    schedule 11.01.2014    source источник
comment
каков тип данных вашего столбца?   -  person M.Ali    schedule 11.01.2014


Ответы (6)


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

Я создаю таблицу со столбцом 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
person Justin Cave    schedule 11.01.2014
comment
Хороший пример. Как тривиальный ярлык, тип данных не нужен только при добавлении значения по умолчанию. Вы можете просто сделать alter table foo modify (col2 default 'bar') - person rimsky; 07.04.2015
comment
@rimsky Аккуратный ярлык, но dev .mysql.com/doc/refman/5.7/en/, похоже, предполагает обратное. Возможно, документация вводит в заблуждение. Также упоминается ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}. - person trss; 14.08.2017
comment
@trss вы цитируете документацию MySQL, но вопрос помечен oracle - person osullic; 29.10.2018
comment
Извините, это моя ошибка. Не заметил этих крошечных тегов. Будет полезно, если в вопросе также упоминается Oracle. - person trss; 30.10.2018

ALTER TABLE *table_name*
MODIFY *column_name* DEFAULT *value*;

работал в оракуле

e.g:

ALTER TABLE MY_TABLE
MODIFY MY_COLUMN DEFAULT 1;
person skk    schedule 14.08.2020

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

пример :

ALTER TABLE RESULT
ALTER COLUMN STATUS SET DEFAULT 'FAIL'
person Pankaj Kumar    schedule 01.03.2016
comment
По какой-то причине это вызывает ошибку ORA-01735: Изменить таблицу MGRA.TAB1 ALTER COLUMN ID_PRO SET DEFAULT 1; - person Magier; 25.01.2018
comment
Я думаю, что это T-SQL (MS SQL), а не Oracle. - person Mike; 18.10.2019

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

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

person amit    schedule 25.10.2016

ALTER TABLE <table_name> MODIFY <column_name> DEFAULT <defult_value>

EX: ALTER TABLE AAA MODIFY ID DEFAULT AAA_SEQUENCE.nextval

Протестировано на Oracle Database 12c Enterprise Edition Release 12.2.0.1.0

person VGoudkov    schedule 05.03.2020

Для Sql Azure работает следующий запрос:

ALTER TABLE [TableName] ADD  DEFAULT 'DefaultValue' FOR ColumnName
GO
person Prema Arya    schedule 27.03.2018