Oracle 禁止和激活约束

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例如,在下面的示例中,将禁用EMPLOYEES表的EMP_PK主键约束,然后再重新激活该约束。
(1)以SCOTT身份连接数据库系统。
(2)使用ALTER TABLE语句禁用EMP_PK主键约束。
SQL> connect scott/tiger
已连接。
SQL> alter table employees
2 enable constraint emp_pk;
alter table employees
*
第1行出现错误:
ORA-02437:无法验证(SCOTT.EMP_PK) -违反主键
SQL> alter table employees
2 enable novalidate constraint emp_pk;
alter table table_name
disable constraint constraint_name;
如果希望激活被禁用的约束,则可以在ALTER TABLE语句中使有ENABLE CONSTRAINT子句激活约束。激活约束的语法形式如下:
alter table table_name
enable [novalidate| valide;
关键字novalidate表示在激活约束时不验证表中已经存在的数据是否满足约束,如果没有使用该关键字,或者使用VALIDATE关键字,则在激活约束时系统将要验证表中的数据是否满足约束的定义。
例如,下面的语句在创建EMPLOYEES表时将定义的约束置为禁用状态:
create table employee_history(
alter table employeesdisable constraint emp_pk keep index;
在禁用惟一性约束或主键约束时,如果有外键约束正在引用该列,则无法禁用惟一性约束或主键约束。这时可以先禁用外键约束,然后再禁用惟一性约束或主键约束;或者在禁用惟一性约束或主键约束时使用CASCADE关键字,这样可以级联禁用引用这些列的外键约束。
2 disable constraint emp_pk;
表已更改。
(3)在EMPLOYEES表中插入一行数据,在数据的EMPNO列为NULL值。
SQL> insert into employees(empno,ename,sex,salary,job,deptno)
2 values(null,'刘丽','女',1600,'CLERK',10);
表已更改。
Oracle
在默认情况下,约束创建之后就一直起作用。但是,也可以根据具体应用情况,临时禁用某个约束。当某个约束被禁用后,访约束就不再起作用了,但它还存在数据库中。
为什么要禁用约束呢?这是因为约束的存在会降低插入和更改数据的效率,系统必须确认这些数据是否满足定义的约束条件。当执行一些特殊操作时,如使用SQL*Loader从外部数据源向表中导入大量数据,并且事先知道操作的数据满足了定义的约束,为提高运行效率,就可以禁用这些约束。
但是,禁用约束只是一种暂时现象,某些在禁用约束状态下完成的操作完成之后,还应该激活约束。如果约束没有必要存在,则可以删除约束。
禁用约束即可以在定义约束时执行,也可以对现有的约束执行禁用操作。在使用CREATE TABLE或ALTER TABLE语句定义约束时,默认情况下约束是激活的。如果在定义约束时使用关键字DISABLE,则约束的是被禁用的。如果希望禁用已经存在的约束,则可以在ALTER TABLE语句中使用DISABLE CONSTRAINT子句。其语法形式如下:
已创建1行。
(4)使用ALTER TABLE语句激活EMP_PK主键约束。现在,由于EMPNO列中存在NULL值,这与主键约束的作用存在冲突,所以激活约束的操作将失败。可以使用两种方式解决该问题:第一是更正表中不满足约束条件的数据;第二是在激活约束时使用NOVALIDATE关键字。
SQL> alter table employees
...
salary number(8,2) constraint emp_sal_ck check (salary>0) disable,
...
)
需要注意,在禁用主键约束时,Oracle默认会删除约束对应的惟一索引,而在重新激活约束时,Oracle将会为重新建立惟一索引。如果希望在删除约束时保留对应的惟一索引,可以在禁用约束时使用关键字KEEY INDEX。例如,下面的语句在禁用主键约束时保留在相应的索引:
相关文档
最新文档