如何修改现有的检查约束?
有没有办法修改表中的现有检查约束,而不是删除和重新创build吗?
create table t ( n number); ora10g> Tabelle wurde erstellt. ora10g> alter table t add constraint ck check(n>0); Tabelle wurde geõndert. ora10g> alter table t modify constraint ck check(n<0); alter table t modify constraint ck check(n<0) * FEHLER in Zeile 1: ORA-00933: SQL-Befehl wurde nicht korrekt beendet
您必须删除它并重新创build它,但是如果您不想要,则不必承担重新validation数据的成本。
alter table t drop constraint ck ; alter table t add constraint ck check (n < 0) enable novalidate;
enable novalidate
子句将强制插入或更新来强制执行约束,但不会强制对表执行全表扫描以validation所有行是否符合要求。
不,你不能这样做。
先创build一个新的约束,然后删除旧的约束。
这样你确保:
- 约束始终到位
- 现有的行不违反新的约束
- 删除约束之后,在应用新约束之前,不会尝试进行非法的INSERT / UPDATE。
不。如果存在这样的特征,它将在此语法图中列出。 (虽然可能有一个没有logging的SQLfunction,或者有一些我不知道的软件包。)