修改表以修改列的默认值

40

我有一个需求,需要修改数据库表中某个列的默认值。该表已经存在于数据库中,当前该列的默认值为NULL。 如果添加新的默认值到该列,如果我没记错的话,它会将该列中所有现有的NULL更新为新的默认值。是否有一种方法可以不这样做,但仍然在列上设置一个新的默认值。 我的意思是,我不想更新现有的NULL,并希望它们保持为NULL。

对此的任何帮助都将不胜感激。 谢谢


您的列数据类型是什么? - M.Ali
6个回答

70

你对未来发生的事情的信念是不正确的。为表中的列设置默认值不会影响现有的数据。

我创建了一个没有默认值的名为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

12
好的例子。作为一个小技巧,当仅添加默认值时,不需要数据类型。您可以这样做:alter table foo modify (col2 default 'bar') - rimsky
@rimsky 很方便的捷径,但https://dev.mysql.com/doc/refman/5.7/en/alter-table.html#alter-table-redefine-column 似乎表明了不同的意见。也许文档是误导性的。它还提到了 ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} - trss
2
@trss,您引用了MySQL文档,但问题标记为“oracle”。 - osullic
抱歉,我的错。没有注意到那些微小的标签。如果问题提到了Oracle,那将会很有帮助。 - trss

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

曾在Oracle工作过

例如:

ALTER TABLE MY_TABLE
MODIFY MY_COLUMN DEFAULT 1;

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

示例:

ALTER TABLE RESULT
ALTER COLUMN STATUS SET DEFAULT 'FAIL'

由于某种原因,这会引发ORA-01735错误:Alter Table MGRA.TAB1 ALTER COLUMN ID_PRO SET DEFAULT 1; - Magier
我认为这是 T-SQL(MS SQL),不是 Oracle。 - Mike

2

效仿Justin的例子,在Postgres中可以使用以下命令:

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

该命令用于将名为“foo”的表中的“col2”列的默认值更改为“bar”。

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

EX: ALTER TABLE AAA MODIFY ID DEFAULT AAA_SEQUENCE.nextval

测试环境为Oracle Database 12c企业版 Release 12.2.0.1.0


-2

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接