天天看点

约束:USER_CONSTRAINTS

45.6 约束和注释

约束和注释有助于理解表和列之间的相互联系。注释只是信息,不能对存储在所描述对象中的数据施加任何条件。而约束定义了数据有效的条件。典型的约束 包括NOT NULL、UNIQUE、PRIMARY KEY 和FOREIGN KEY。以下几节将介绍如何从数据字典中检索有关约束和注释的数据。

45.6.1 约束:USER_CONSTRAINTS

通过USER_CONSTRAINTS 视图,可以访问约束信息。此信息在试图更改数据约束或解决应用程序的数据问题时非常有用。下面的清单列出了该视图的列。

  1. COLUMN_NAME  
  2. ------------------------------  
  3. OWNER  
  4. CONSTRAINT_NAME  
  5. CONSTRAINT_TYPE  
  6. TABLE_NAME  
  7. SEARCH_CONDITION  
  8. R_OWNER  
  9. R_CONSTRAINT_NAME  
  10. DELETE_RULE  
  11. STATUS  
  12. DEFERRABLE  
  13. DEFERRED  
  14. VALIDATED  
  15. GENERATED  
  16. BAD  
  17. RELY  
  18. LAST_CHANGE  
  19. INDEX_OWNER  
  20. INDEX_NAME  
  21. INVALID  
  22. VIEW_RELATED 

尽管这是1 个“USER”视图,但却包含1 个Owner 列。在此视图中,Owner 指约束的所有者,而不是表的所有者(用户)。

Constraint_Type 列的有效值如下:

C CHECK 约束,包括一些NOT NULL

P 主键约束

R 外键(引用)约束

U 唯一约束

V WITH CHECK OPTION 约束(用于视图)

O WITH READ ONLY 约束(用于视图)

要想获取关于约束的有用信息,理解约束类型很重要。

外键约束总是具有R_Owner 和R_Constraint_Name 这两列的值。这两列指出外键引用了哪个约束。一个外键引用另一个约束,而不是另一列。由于列的 NOT NULL 约束将存储为CHECK 约束,因此它们的Constrain_Type 为C。

查询USER_CONSTRAINTS 视图将会得到表中所有约束的名称。这在解释只提供违反约束的约束名的错误消息时非常有用。

一旦知道了约束的名称和类型,就能通过USER_CONS_COLUMNS 视图检查与之相关的列,该内容将在45.6.2 节介绍。

如果在创建约束时未给约束赋予名称,则Oracle 将生成一个唯一的约束名。详细信息请参阅附录A 中的“INTEGRITY CONSTRAINTS ”部分。如果约束名由系统生成,则通过Generated 列指出该事实。

如果延迟一个约束(由Deferred 列指出),则该约束不能在事务处理期间实施。例如,如果在相关表中执行大量的更新操作,并且不能保证事务处理的顺序正确,就可以决定延迟在表上检查的约束,直到所有的更新操作完成为止。

ALL_CONSTRAINTS 视图列出了用户或PUBLIC 能访问的所有表的约束。DBA_CONSTRAINTS 视图列出了数据库中的所有约束。这些视图都有与USER_CONSTRAINTS视图相同的列组(因为它们都包含Owner 列)。

http://book.51cto.com/art/201007/212406.htm