oracle 检查表的约束信息,使约束生效和失效

xiaoxiao2024-11-07  6

[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/
转载请注明原文地址: https://www.6miu.com/read-5019224.html

最新回复(0)