您对将会发生的事情的信念是不正确的。为列设置默认值不会影响表中的现有数据。
我创建一个表,该表的列
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 3SQL> 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 fooSQL> insert into foo( col1 ) values (5);1 row created.SQL> select * from foo; COL1 COL2---------- ---------- 1 2 3 4 foo 5 bar



