[color=red]检查表的约束信息:[/color]
SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,SEARCH_CONDITION FROM USER_CONSTRAINTSWHERE TABLE_NAME='图书';
执行结果:
CONSTRAINT_NAME C SEARCH_CONDITION------------------------------------- ----- ------------------------------------SYS_ C003111 C "图书名称" IS NOT NULLSYS_C003112 C "出版社编号" IS NOT NULLSYS_C003113 C LENGTH(出版社编号)=2SYS_C003114 C 数量>0PK_2 PYS_1 UFK_1 R
说明:图书表共有7个约束条件,一个PRIMARY KEY(P)约束PK_2,一个FOREIGN KEY(R)约束FK_1,一个UNIQUE(R)约束YS_1和4个CHECK(C)约束SYS_C003111、SYS_C003112、SYS_C003113
和SYS_C003114,4个CHECK约束的名字是由系统命名的。
[color=red]使约束生效和失效[/color]
约束的作用是保护数据完整性,但有的时候约束的条件可能不再适用或没有必要,如果这个约束条件依然发生作用就会影响操作的效率,比如导出和导入数据时要暂时关闭约束条件,这时可以使用下面的命令关闭或打开约束条件。
使约束条件失效:
ALTER TABLE 表名 DISABLE CONSTRANT 约束名;
使约束条件生效:
ALTER TABLE 表名 ENABLE CONSTRANT 约束名;
使图书表的数量检查失效。
步骤1:使约束条件SYS_C003114(数量>0)失效:
ALTER TABLE 图书 DISABLE CONSTRAINT SYS_C003114;
执行结果:
表已更改。
步骤2:修改数量为0:
UPDATE 图书 SET 数量=0 WHERE 图书编号='A0001';
执行结果:
已更新 1 行。
步骤3:使约束条件SYS_C003114生效:
ALTER TABLE 图书 ENABLE CONSTRAINT SYS_C003114;
执行结果:
ERROR 位于第 1 行:
ORA-02293: 无法验证 (SCOTT.SYS_C003114) - 违反检查约束条件
继续执行:
UPDATE 图书 SET 数量=5 WHERE 图书编号='A0001';
执行结果:
已更新 1 行。
继续执行:
ALTER TABLE 图书 ENABLE CONSTRAINT SYS_C003114;
执行结果:
表已更改。
说明:在步骤1中,先使名称为SYS_C003114 (数量>0)的检查条件暂时失效,所以步骤2修改第1条记录的数量为0才能成功。步骤3使该约束条件重新生效,但因为表中有数据不满足该约束条件,所以发生错误,通过修改第一条记录的数量为5,使约束条件重新生效。
黑色头发:http://heisetoufa.iteye.com/