alter table report add favourite_film VARCHAR2(100) DEFAULT 'Star Wars';
用默认值添加新的列,而不是对现有的行
这增加了使用默认值的新列,但在我看来,它也将在所有预先存在的行中的默认值,而不是让他们空这是我的首选。我们想为了方便添加一个带有默认值的新列,但添加此列之前的行应该有一个空值。
是否有更好的方法来做到这一点不是简单地将所有的行以null
值添加新列后?
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.
注意,按照Oracle docs,如果使用alter table命令的add列的条款,将指定的默认值添加到现有的行:
如果指定一个空列DEFAULT子句,那么 默认值被添加到现有行,因为这ALTER TABLE语句 的一部分,并在表上定义的UPDATE触发器被解雇。如果你改变了 默认值的NOT NULL列可为空 这种行为也导致。
这很有趣。为什么修改默认值会有不同的行为? –
看到我的编辑,谢谢。 – tbone
alter table with null value default或在alter table后将新字段更新为null – Frank
因此,您希望默认值为“星球大战”,但仅适用于添加新列后的表格新条目?将需要更多信息/代码来了解你的程序的逻辑,但它似乎第一步是删除默认的ALTER TABLE语句的“星球大战”的部分,然后再确定如何使“星球大战”的表中新条目的默认值。 –
嗯,是的,这就是我问(至少我认为我是) –