【COLUMN】设置表字段默认值仅对未来生效
提问:设置表字段的默认值是否会对已有数据数据进行调整?回答此类问题最有效的方法就是“实践”。设计一个实验进行验证,然后再从原理上进行理解。印象将会深刻。
回答:设置表字段的默认值不会对已有数据数据进行调整,只会影响未来字段内容。
1.创建测试表T并初始化数据
sec@ora10g> create table t (x number,y number);
Table created.
sec@ora10g> insert into t values (1,null);
1 row created.
sec@ora10g> select * from t;
X Y
---------- ----------
1
2.调整T表的X字段的默认值为5000
sec@ora10g> alter table t modify (y default 5000);
Table altered.
3.验证对现有数据的影响
sec@ora10g> select * from t;
X Y
---------- ----------
1
可见,对原有的Y值没有影响,之前是NULL值,现在仍然是NULL值。
4.测试对新插入的数据的效果
sec@ora10g> insert into t(x) values (2);
1 row created.
sec@ora10g> commit;
Commit complete.
sec@ora10g> select * from t;
X Y
---------- ----------
1
2 5000
新加入的数据的Y值已经被初始化为默认值5000。
5.小结
到此,通过一个非常简单的实验便对可能存在的“疑问”以自问自答的形式处理完毕。结论是,当设置表字段的默认值不会对已有数据数据进行调整,只会影响未来字段内容。