更改表以修改列的默认值

时间:2014-01-11 01:11:30

标签: sql oracle alter-table

我有一个要求,我们需要在数据库表中修改列的默认值。该表已经是数据库中的现有表,当前该列的默认值为NULL。 现在,如果向此列添加新的默认值,如果我是正确的,它会将列的所有现有NULL更新为新的DEfault值。有没有办法不这样做,但仍然在列上设置一个新的默认值。 我的意思是我不希望更新现有的NULL并希望它们保持为NULL。

对此有任何帮助表示赞赏。 感谢

6 个答案:

答案 0 :(得分:51)

您对将要发生的事情的看法是不正确的。设置列的默认值不会影响表中的现有数据。

我创建了一个列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

答案 1 :(得分:1)

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

示例:

ALTER TABLE RESULT
ALTER COLUMN STATUS SET DEFAULT 'FAIL'

答案 2 :(得分:1)

按照贾斯汀的例子,下面的命令适用于Postgres:

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

答案 3 :(得分:1)

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

EX: ALTER TABLE AAA MODIFY ID DEFAULT AAA_SEQUENCE.nextval

在Oracle Database 12c企业版12.2.0.1.0版上进行了测试

答案 4 :(得分:1)

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

在Oracle中工作

例如:

ALTER TABLE MY_TABLE
MODIFY MY_COLUMN DEFAULT 1;

答案 5 :(得分:-1)

对于Sql Azure,以下查询有效:

ALTER TABLE [TableName] ADD  DEFAULT 'DefaultValue' FOR ColumnName
GO