有没有办法修改表上的现有检查约束 除了删除并重新创建?
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
答案 0 :(得分:107)
您必须删除它并重新创建它,但如果您不想这样做,则不必承担重新验证数据的费用。
alter table t drop constraint ck ;
alter table t add constraint ck check (n < 0) enable novalidate;
enable novalidate
子句将强制插入或更新以强制执行约束,但不会强制对表执行全表扫描以验证所有行是否符合。
答案 1 :(得分:2)
不,你不能这样做。
答案 2 :(得分:2)
首先创建一个新约束,然后删除旧约束 这样你就可以确保:
答案 3 :(得分:0)
没有。如果存在此功能,则会在此syntax illustration中列出。 (虽然有可能存在未记录的SQL功能,或者可能有一些我不知道的包。)