web-dev-qa-db-ja.com

表を変更して列のデフォルト値を変更します

データベーステーブルの列のデフォルト値を変更する必要があるという要件があります。テーブルは既にデータベース内の既存のテーブルであり、現在、列のデフォルト値はNULLです。この列に新しいデフォルト値を追加すると、正しい場合は、列のすべての既存のNULLが新しいDEfault値に更新されます。これを行わずに、列に新しいデフォルト値を設定する方法はありますか。つまり、既存のNULLを更新せず、NULLのままにしておきたいということです。

これに関するヘルプは大歓迎です。ありがとう

26
ravi

何が起こるかについてのあなたの信念は正しくありません。列にデフォルト値を設定しても、テーブル内の既存のデータには影響しません。

デフォルト値のない列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
55
Justin Cave
ALTER TABLE {TABLE NAME}
ALTER COLUMN {COLUMN NAME} SET DEFAULT '{DEFAULT VALUES}'

例:

ALTER TABLE RESULT
ALTER COLUMN STATUS SET DEFAULT 'FAIL'
1
Pankaj Kumar

ジャスティンの例に従って、以下のコマンドはPostgresで機能します。

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

1
amit