除了删除和重新创建表之外,有没有办法修改表上的现有检查约束 ?
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
Run Code Online (Sandbox Code Playgroud)
Ada*_*sch 117
您必须删除它并重新创建它,但如果您不想这样做,则不必承担重新验证数据的成本.
alter table t drop constraint ck ;
alter table t add constraint ck check (n < 0) enable novalidate;
Run Code Online (Sandbox Code Playgroud)
该enable novalidate子句将强制插入或更新以强制执行约束,但不会强制对表执行全表扫描以验证所有行是否符合.
首先创建一个新约束,然后删除旧约束。
这样,您可以确保: