因为想通过sql语句来查看数据库表的相关约束信息,通过看了网上的一些资料,觉得有必要一下笔记。
Oracle将用户创建的表、约束等信息都放在数据字典表中,允许开发人员查询数据字典表或视图来获取数据库对象的信息,比如一个表的创建者信息、创建时间信息、所属表空间信息、用户访问权限信息等。如果用户在对数据库中的数据进行操作时遇到困难,就可以访问数据字典来查看数据库对象的详细信息,数据字典中包含的主要内容如下所示。
各种方案对象的定义信息,如表、视图、索引、同义词、存储过程、函数、包、触发器和各种对象。
存储空间的分配信息,如为某个对象分配了多少存储空间,该对象使用了多少存储空间。
安全信息,如账户、权限、角色、完整性约束信息。
数据库实例运行时的性能和统计信息。
其他数据库运行过程中的基本信息。
注意:数字字典表本身不能被直接访问,必须通过数据字典视图来访问数据字典中的信息,系统的数据字典视图以V$开头。
数据字典表根据其前缀又可分为如下4类。
user:用户所创建对象对应的数据字典表,例如user_objects、user_tables等。
all:用户所能访问对象(包括用户创建的对象)对应的数据字典表,例如all_objects、all_tables等。
dba:所有对象对应的数据字典表,例如all_objects、all_tables等。
v$:描述系统性能相关的数据字典表。如通过v$version表可获得数据库版本信息。
有两个数据字典视图提供了约束的详细信息。
user_constraints:对于表中的每一个约束,在该表中都有一条记录描述这个约束,该表包含约束应用到的表,如果知道约束名,想知道约束类型,可以查询user_constraints,这个视图描述了约束的定义,但是它不提供约束定义在哪些字段名称上。
user_cons_columns:视图中显示约束的字段名称。如果主键是一个联合(多字段)主键,这个视图中将有这个约束的两条记录,联合主键的每一个字段对应一条记录,每一条记录通过position(在联合主键中的位置)来区别。
例如要查询invoice_check_others表中的所有约束信息,可以使用如下的SQL语句:
SELECT constraint_name, search_condition, status FROM user_constraints WHERE table_name = UPPER ('cityandcode');
可见在user_constraints 表上有很多的数据库原信息
下面可以查看user_constraints 表中具体有哪些信息
select * from user_constraints
在user_constraints视图中并没有包含约束应用到的列信息,为了获取invoice_check_单位others表的列约束信息,可以使用如下的代码查询user_cons_columns视图,如以下代码所示。
--查询约束应用的列信息 SELECT constraint_name, column_name FROM user_cons_columns WHERE table_name = UPPER ('cityandcode');
其他的作为DBA,可以使用all_constraints和all_cons_columns来获取约束的详细信息。
先到这里