webentwicklung-frage-antwort-db.com.de

Ändern Sie die Tabelle, um den Standardwert der Spalte zu ändern

Ich habe eine Anforderung, in der wir den Standardwert einer Spalte in der Datenbanktabelle ändern müssen. Die Tabelle ist bereits in der Datenbank vorhanden und der Standardwert der Spalte ist NULL. Wenn Sie dieser Spalte nun einen neuen Standardwert hinzufügen, werden bei Richtigkeit alle vorhandenen NULL-Werte der Spalte auf den neuen DEfault-Wert aktualisiert. Gibt es eine Möglichkeit, dies nicht zu tun, aber dennoch einen neuen Standardwert für die Spalte festzulegen? Ich meine, ich möchte nicht, dass die vorhandenen NULL-Werte aktualisiert werden und sie als NULL-Werte bleiben.

Jede Hilfe hierzu wird gebeten. Vielen Dank

26
ravi

Ihr Glaube an das, was passieren wird, ist nicht korrekt. Das Festlegen eines Standardwerts für eine Spalte wirkt sich nicht auf die vorhandenen Daten in der Tabelle aus.

Ich erstelle eine Tabelle mit einer Spalte col2 das hat keinen Standardwert

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

Wenn ich dann die Tabelle ändere, um einen Standardwert festzulegen, ändert sich nichts an den vorhandenen Zeilen

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

Auch wenn ich die Standardeinstellung später erneut ändere, werden die vorhandenen Zeilen nicht geändert

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}'

beispiel:

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

Nach dem Beispiel von Justin funktioniert der folgende Befehl in Postgres:

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

1
amit