SQL |使用数据字典检查表上的现有约束
先决条件:SQL 约束
在 SQL Server 中,数据字典是一组数据库表,用于存储有关数据库定义的信息。可以使用这些数据字典来检查已经存在的表上的约束并更改它们(如果可能的话)。
- USER_CONSTRAINTS 数据字典:此数据字典包含有关数据库中使用的每个约束的信息以及特定于约束的信息。
DESC USER_CONSTRAINTS; Name Null Type ----------------- -------- ------------ OWNER VARCHAR2(30) CONSTRAINT_NAME NOT NULL VARCHAR2(30) CONSTRAINT_TYPE VARCHAR2(1) TABLE_NAME NOT NULL VARCHAR2(30) SEARCH_CONDITION LONG R_OWNER VARCHAR2(30) R_CONSTRAINT_NAME VARCHAR2(30) DELETE_RULE VARCHAR2(9) STATUS VARCHAR2(8) DEFERRABLE VARCHAR2(14) DEFERRED VARCHAR2(9) VALIDATED VARCHAR2(13) GENERATED VARCHAR2(14) BAD VARCHAR2(3) RELY VARCHAR2(4) LAST_CHANGE DATE INDEX_OWNER VARCHAR2(30) INDEX_NAME VARCHAR2(30) INVALID VARCHAR2(7) VIEW_RELATED VARCHAR2(14)
约束类型有:
C - Check constraint on a table P - Primary key U - Unique key R - Referential integrity V - With check option, on a view O - With read only, on a view H - Hash expression F - Constraint that involves a REF column S - Supplemental logging
现在考虑以下源表“SDF”:
SUPPNO SNAME STATUS CITY 21 JONYY 25 NY 22 MIKKY 11 LA 23 JIM 29 LV 24 BNFERYY 47 HW 25 TIM 41 HS
用于检查此表上的约束的查询:
SELECT CONSTRAINT_NAME, SEARCH_CONDITION AS CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE TABLE_NAME='SDF';
输出:
CONSTRAINT_NAME CONSTRAINT_TYPE XYZ STATUS<50 Abc (NULL) - USER_CONS_COLUMNS 数据字典: 我们可以使用此数据字典来查找已应用约束的列。
- 使用笛卡尔积获取有关约束的完整信息:
SELECT A.CONSTRAINT_NAME, A.CONSTRAINT_TYPE, B.COLUMN_NAME, B.TABLE_NAME FROM USER_CONSTRAINTS A, USER_CONS_COLUMNS B WHERE A.CONSTRAINT_NAME=B.CONSTRAINT_NAME AND A.TABLE_NAME='SDF';
输出:
CONSTRAINT_NAME CONSTRAINT_TYPE COLUMN_NAME TABLE_NAME XYZ C STATUS SDF ABC P SUPPNO SDF
DESC USER_CONS_COLUMNS;
Name Null Type
--------------- -------- --------------
OWNER NOT NULL VARCHAR2(30)
CONSTRAINT_NAME NOT NULL VARCHAR2(30)
TABLE_NAME NOT NULL VARCHAR2(30)
COLUMN_NAME VARCHAR2(4000)
POSITION NUMBER
查询以检查具有约束的 SDF 表的列:
SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME='SDF';
输出:
OWNER | CONSTRAINT_NAME | TABLE_NAME | COLUMN_NAME | POSITION |
---|---|---|---|---|
SYSTEM | XYZ | SDF | STATUS | (null) |
SYSTEM | ABC | SDF | STATUS | 1 |