Oracle Constraint_type,约束类型

SQL查询数据库约束类型及应用
本文详细介绍了如何使用SQL查询数据库中的约束类型,并通过示例展示了如何查看外键约束和被引用情况,以及所有表的记录数。主要内容包括:查询约束类型、查看主键和外键约束关系、查看被引用的约束以及所有表的记录数。

select distinct constraint_type from dba_constraints;

Type Code

Type Description

Acts On Level

C

Check on a table

Column

O

Read Only on a view

Object

P

Primary Key

Object

R

Referential AKA Foreign Key

Column

U

Unique Key

Column

V

Check Option on a view

Object

SELECT * FROM all_CONSTRAINTS where owner='SCOTT'

all_tab_cols显示所有列,当然也包含隐藏列。
all_tab_columns不显示隐藏列。来源于all_tab_cols;

查询字段,表的描述------------------------------------------

select * from all_col_comments where LOWER(TABLE_NAME)='all_constraints'

SELECT * FROM ALL_TAB_COMMENTS WHERE OWNER='SCOTT'

外键约束也称为主键完整性约束。它使用一列或多列作为外键,建立了此外键与同一张表或者另一张表的主键之间的关系。要确定一张数据表的外键,其他被引用的表及其主键必须已经存在。虽然外键与被引用的主键列不需要具有相同的名称,但是外键值必须与父表的主键值相匹配,或者外键值是空值。
查看一个表对应的主键和外键的约束关系=============查看引用其它表的情况=========

select A.owner 原表拥有者,A.table_name 原表,A.constraint_name 约束名称
,A.constraint_type 约束类型,B.column_name 原表约束字段
,A.delete_rule 删除级联
,A.R_OWNER 引用表拥有者
,A.R_CONSTRAINT_NAME 引用约束名称
,AA.table_name 引用表
,BB.column_name 引用列
from all_constraints A
inner join all_cons_columns B
on A.constraint_name=B.constraint_name and A.table_name=B.table_name
left join all_constraints AA
on A.r_constraint_name=AA.constraint_name
left join all_cons_columns BB
on AA.constraint_name=BB.constraint_name and AA.table_name=BB.table_name
where A. owner='IUFO'
and A.table_name='IUFO_MEASURE'
--and A.CONSTRAINT_TYPE='R'

==========================================================================

=====查看被引用的情况===========================================

select A.constraint_name 被引用的约束名
,A.TABLE_NAME 被引用的表
,A.COLUMN_NAME 被引用约束字段
,B.CONSTRAINT_NAME 约束名称
,B.TABLE_NAME 约束表
,AA.COLUMN_NAME 引用子段
from all_cons_columns A
left join all_constraints B
on B.R_CONSTRAINT_NAME=A.CONSTRAINT_NAME
left join all_cons_columns AA
on B.CONSTRAINT_NAME=AA.CONSTRAINT_NAME and B.R_OWNER=AA.OWNER
where A.table_name='IUFO_MEASURE_PUBDATA'
and B.CONSTRAINT_TYPE='R'

================================================================

所有表的记录数--------------------

select owner,table_name,num_rows from all_tables where owner='SCOTT'

From: http://blog.sina.com.cn/s/blog_53bfa6910100vm9l.html
CREATE OR REPLACE PROCEDURE PRO_CREATE_CONSTRAINT ( iv_constraint_name in varchar2, iv_table_name in varchar2, iv_columns_name in varchar2, iv_sql_create_constraint in varchar2 )authid current_user as vi_cnt1 number(10) :=0; vi_cnt2 number(10) :=0; vi_new_count number(10) :=0; vi_old_count number(10) :=0; vv_cons_name varchar2(100) :=''; vv_cons_cols varchar2(100) :=''; begin SELECT COUNT(1) INTO vi_cnt1 FROM MY_CONSTRAINTS t WHERE t.CONSTRAINT_NAME = upper(iv_constraint_name) AND t.TABLE_NAME = upper(iv_table_name) AND t.CONS_COLS = upper(iv_columns_name); if vi_cnt1 = 0 then SELECT COUNT(1) INTO vi_cnt2 FROM MY_CONSTRAINTS t WHERE t.TABLE_NAME = upper(iv_table_name) AND t.CONSTRAINT_TYPE = 'P'; if vi_cnt2 > 0 then SELECT CONSTRAINT_NAME,CONS_COLS INTO vv_cons_name,vv_cons_cols FROM MY_CONSTRAINTS t WHERE t.TABLE_NAME = upper(iv_table_name) AND t.CONSTRAINT_TYPE = 'P'; if iv_columns_name = vv_cons_cols AND iv_constraint_name != vv_cons_name then EXECUTE IMMEDIATE 'ALTER TABLE ' || iv_table_name || ' RENAME CONSTRAINT ' || vv_cons_name || ' to ' || iv_constraint_name; SELECT COUNT(1) INTO vi_new_count FROM my_indexes t WHERE t.index_name = upper(iv_constraint_name); SELECT COUNT(1) INTO vi_old_count FROM my_indexes t WHERE t.index_name = upper(vv_cons_name); if vi_old_count >0 AND vi_new_count=0 then EXECUTE IMMEDIATE 'ALTER INDEX ' || vv_cons_name || ' RENAME TO ' || iv_constraint_name; end if; elsif iv_columns_name != vv_cons_cols then EXECUTE IMMEDIATE 'ALTER TABLE ' || iv_table_name || ' DROP CONSTRAINT IF EXISTS ' || vv_cons_name; EXECUTE IMMEDIATE 'DROP INDEX IF EXISTS ' || vv_cons_name; EXECUTE IMMEDIATE iv_sql_create_constraint; end if; else EXECUTE IMMEDIATE iv_sql_create_constraint; end if; end if; end; / EXEC PRO_CREATE_CONSTRAINT('PK_CPS_BULK_TYPE_CONFIG','CPS_BULK_TYPE_CONFIG','TYPE_NAME,APPLY_OBJECT','ALTER TABLE CPS_BULK_TYPE_CONFIG ADD CONSTRAINT IF NOT EXISTS PK_CPS_BULK_TYPE_CONFIG PRIMARY KEY (TYPE_NAME,APPLY_OBJECT) USING INDEX TABLESPACE {{TABLESPACE_INDEX}} '); ALTER TABLE CPS_BULK_TYPE_CONFIG MODIFY APPLY_OBJECT VARCHAR2(2) NOT NULL; DROP PROCEDURE IF EXISTS PRO_CREATE_CONSTRAINT;
最新发布
08-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值