Oracle: 查询表约束主键、约束唯一索引、索引字段

-- 测试环境: oracle 11g

Oracle:  查询表约束主键、约束唯一索引、索引字段

表例子:
DROP table infodba.cux_hr_employee;


create table infodba.cux_hr_employee(
employee_id number not null,
EMPLOYEE_NUMBER NUMBER NOT NULL ,
first_name varchar2(50),
MIDDLE_NAME VARCHAR2(50),
LAST_NAME VARCHAR2(50),
CARD_NUMBER VARCHAR2(50) NOT NULL ,
CREATION_DATE DATE DEFAULT SYSDATE NOT NULL,
CREATED_BY NUMBER DEFAULT -1 ,
LAST_UPDATE_DATE DATE,
LAST_UPDATED_BY NUMBER,
LAST_UPDATE_LOGIN NUMBER ,
CONSTRAINT PK_HR_EMPLOYEE PRIMARY KEY (EMPLOYEE_ID ), /*约束主键*/
CONSTRAINT CONSTRAINT_U1 UNIQUE( EMPLOYEE_NUMBER, CARD_NUMBER) /*约束唯一组合*/
);

-- 创建唯一组合索引
CREATE UNIQUE INDEX INFODBA.CUX_HR_EMPLOYEE_U1 ON INFODBA.CUX_HR_EMPLOYEE( EMPLOYEE_NUMBER, CARD_NUMBER);

-- 约束
SELECT * FROM SYS.ALL_CONSTRAINTS DC
-- 约束
SELECT * FROM SYS.DBA_CONSTRAINTS DC
WHERE DC.OWNER = 'INFODBA'
AND DC.TABLE_NAME = 'CUX_HR_EMPLOYEE' ;
/*
dba_constraints 是 Oracle 数据库中一个非常重要的数据字典视图,它提供了关于数据库中所有约束(constraints)的详细信息。这些约束用于确保数据的完整性和一致性。以下是一些主要字段的含义:

CONSTRAIN_NAME: 约束名称 , 一般以 SYS_C012345 的命名格式。
CONSTRAIN_TYPE:


OWNER: 约束所属的模式(schema)的名称。
CONSTRAINT_NAME: 约束的名称,这是一个唯一标识符,用于区分同一模式中的不同约束。
CONSTRAINT_TYPE: 约束的类型,可能的值包括:
-*   C: Check 约束,用于定义列值的条件。
-*   P: Primary Key 主键约束,保证一列或多列的值在表中是唯一的且非空。
-*   U: Unique 唯一约束,类似于主键,但允许有空值。
-*   R: Referential Integrity 外键约束,用于维护表之间的关系。
-*   V: With Check Option on View 视图上的检查选项约束。
-*   O: With Read Only Option on View 视图上的只读选项约束。
TABLE_NAME: 约束所在的表的名称。
SEARCH_CONDITION: 对于 Check 约束,这个字段包含定义的条件表达式。对于其他类型的约束,此字段通常为 NULL。
R_OWNER: 如果约束是外键约束,则此字段表示被引用约束所在模式的名称;否则为 NULL。
R_CONSTRAINT_NAME: 如果约束是外键约束,则此字段表示被引用的约束名称;否则为 NULL。
DELETE_RULE: 在删除操作时应用的外键约束规则,可能的值包括:
CASCADE: 删除父表中的行时,也删除子表中匹配的行。
SET NULL: 将子表中匹配行的外键值设置为 NULL。
NO ACTION: 不执行任何操作(Oracle 实际会延迟到事务结束时检查)。
RESTRICT: 如果有匹配的子行存在,则不允许删除父行。
STATUS: 约束的状态,可能的值包括:
-*   ENABLED: 约束有效并强制执行。
-*   DISABLED: 约束无效且不强制执行。
-*   DEFERRED: 约束在当前会话中延迟检查,直到事务结束。
-*   IMMEDIATE: 立即检查约束(默认值)。
-*   DEFERRABLE: 表示约束是否可以延迟检查,可能的值为 YES 或 NO。
-*   VALIDATED: 表示约束是否已经被验证,可能的值为 VALIDATED、NOT VALIDATED 或 RELY。VALIDATED 表示约束已经通过验证,NOT VALIDATED 表示约束尚未验证,而 RELY 表示 Oracle 假定该约束总是有效的。
GENERATED: 表示约束名称是由用户生成的还是由系统生成的,通常对于主键和唯一约束可能是 USER NAMED 或 SYSTEM NAMED 或 GENERATED NAME。
BAD: 如果约束因为某些原因处于不良状态,则此字段将提供额外的信息。
RELY: 表示是否依赖于约束的有效性来优化查询性能,可能的值为 YES 或 NO。
LAST_CHANGE: 记录最后一次更改约束的时间戳。
INDEX_OWNER: 如果约束与索引相关联(如主键或唯一约束),则此字段显示索引所属的模式名称。
INDEX_NAME: 与约束关联的索引的名称。
INVALID: 表示约束是否无效,可能的值为 NULL、DISABLED 或其他特定于约束类型的信息。
VIEW_RELATED: 如果约束与视图相关,则此字段提供额外信息;否则为 NULL。
了解这些字段有助于 DBA 和开发人员更好地管理和维护数据库中的数据完整性约束。
*/

-- 索引名称
SELECT * FROM SYS.DBA_INDEXES IDX
WHERE OWNER = 'INFODBA'
AND INDEX_NAME LIKE 'SYS_C009110';

-- 索引字段
SELECT * FROM SYS.DBA_IND_COLUMNS DIC
WHERE DIC.INDEX_NAME ='SYS_C009110'

posted @ 2025-09-04 21:41  samrv  阅读(8)  评论(0)    收藏  举报