添加具有默认值的新列,而不是现有行

2023-12-28

alter table report add favourite_film VARCHAR2(100) DEFAULT 'Star Wars';

这会添加一个具有默认值的新列,但在我看来,它还会在所有预先存在的行上设置默认值,而不是将它们保留为空,这是我的偏好。为了方便起见,我们希望添加一个具有默认值的新列,但添加此列之前的行应该具有空值。

有没有比简单地将所有行的值设置为更好的方法null添加新列后立即?


尝试做类似的事情:

SQL> create table testtab
(
id number,
col1 varchar2(10)
)
Table created.
SQL> insert into testtab(id, col1) values (1,'TEST1')
1 row created.
SQL> insert into testtab(id, col1) values (2,'TEST2')
1 row created.
SQL> commit
Commit complete.
SQL> alter table testtab add col2 varchar2(10)
Table altered.
SQL> alter table testtab modify col2 default 'DEFAULT'
Table altered.
SQL> select * from testtab

        ID COL1       COL2      
---------- ---------- ----------
         1 TEST1                
         2 TEST2                

2 rows selected.
SQL> insert into testtab(id, col1) values (3,'TEST3')
1 row created.
SQL> select * from testtab

        ID COL1       COL2      
---------- ---------- ----------
         1 TEST1                
         2 TEST2                
         3 TEST3      DEFAULT   

3 rows selected.

请注意,根据甲骨文文档 https://docs.oracle.com/cloud/latest/db112/SQLRF/statements_3001.htm#i2198241,如果使用alter table命令的add column子句,它将向现有行添加指定的默认值:

如果为可为空的列指定 DEFAULT 子句,则 默认值作为此 ALTER TABLE 的一部分添加到现有行 语句,并且表上定义的任何更新触发器都会被触发。 如果您将 NOT NULL 列更改为 默认值可以为空。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加具有默认值的新列,而不是现有行 的相关文章

随机推荐