用于识别不起作用的主键约束
一、SQL脚本
–检查不起作用的约束(禁用状态的主键约束)
SELECT OWNER, — 约束所属用户
CONSTRAINT_NAME, — 约束名称
TABLE_NAME, — 约束对应的表
CONSTRAINT_TYPE, — 约束类型('P'代表主键约束)
STATUS — 约束状态('DISABLE'代表禁用)
FROM DBA_CONSTRAINTS
WHERE STATUS = 'DISABLE' — 筛选禁用状态的约束
AND CONSTRAINT_TYPE = 'P'; — 仅筛选主键约束
二、脚本说明
该脚本的目标是识别处于禁用状态的主键约束:
- CONSTRAINT_TYPE = 'P':限定仅查询主键约束(主键是保证表记录唯一性、非空的核心约束);
- STATUS = 'DISABLE':筛选“不起作用”的约束(禁用状态下,约束不会对表的DML操作生效)。
| OWNER | 约束所属的数据库用户 | 定位该主键约束对应的业务用户 |
| CONSTRAINT_NAME | 主键约束的名称 | 后续启用约束的核心标识 |
| TABLE_NAME | 约束对应的表 | 明确是哪个表的主键约束被禁用 |
| CONSTRAINT_TYPE | 约束类型 | 此处固定为P(主键约束) |
| STATUS | 约束状态 | DISABLE表示约束当前不起作用 |
三注意事项
DISABLE表示约束当前不起作用
四、补充说明
1、禁用主键约束的影响
主键约束被禁用后,会破坏数据完整性:
2、处理建议
需先确保表中无重复/空值数据,再启用约束:
FROM [OWNER].[TABLE_NAME]
GROUP BY [主键字段]
HAVING COUNT(*) > 1; — 若有结果,说明存在重复数据
— 示例:启用SCOTT用户EMP表的主键约束PK_EMP
ALTER TABLE SCOTT.EMP ENABLE CONSTRAINT PK_EMP;