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'