如何修改现有的检查约束?

有没有办法修改表中的现有检查约束,而不是删除和重新创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,或者有一些我不知道的软件包。)