我有一个需求,需要修改数据库表中某个列的默认值。该表已经存在于数据库中,当前该列的默认值为NULL。 如果添加新的默认值到该列,如果我没记错的话,它会将该列中所有现有的NULL更新为新的默认值。是否有一种方法可以不这样做,但仍然在列上设置一个新的默认值。 我的意思是,我不想更新现有的NULL,并希望它们保持为NULL。
对此的任何帮助都将不胜感激。 谢谢
我有一个需求,需要修改数据库表中某个列的默认值。该表已经存在于数据库中,当前该列的默认值为NULL。 如果添加新的默认值到该列,如果我没记错的话,它会将该列中所有现有的NULL更新为新的默认值。是否有一种方法可以不这样做,但仍然在列上设置一个新的默认值。 我的意思是,我不想更新现有的NULL,并希望它们保持为NULL。
对此的任何帮助都将不胜感激。 谢谢
你对未来发生的事情的信念是不正确的。为表中的列设置默认值不会影响现有的数据。
我创建了一个没有默认值的名为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
alter table foo modify (col2 default 'bar')
。 - rimskyALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
。 - trssALTER TABLE *table_name*
MODIFY *column_name* DEFAULT *value*;
曾在Oracle工作过
例如:
ALTER TABLE MY_TABLE
MODIFY MY_COLUMN DEFAULT 1;
ALTER TABLE {TABLE NAME}
ALTER COLUMN {COLUMN NAME} SET DEFAULT '{DEFAULT VALUES}'
示例:
ALTER TABLE RESULT
ALTER COLUMN STATUS SET DEFAULT 'FAIL'
效仿Justin的例子,在Postgres中可以使用以下命令:
alter table foo alter column col2 set default 'bar';
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
对于 Sql Azure,以下查询有效:
ALTER TABLE [TableName] ADD DEFAULT 'DefaultValue' FOR ColumnName
GO