특정 데이터베이스에서 모든 제약 조건 목록을 얻으려면 어떻게합니까?
답변:
information_schema.table_constraints
테이블을 사용하여 각 테이블에 정의 된 제약 조건의 이름을 가져옵니다.
select *
from information_schema.table_constraints
where constraint_schema = 'YOUR_DB'
information_schema.key_column_usage
테이블을 사용하여 각 제약 조건의 필드를 가져옵니다.
select *
from information_schema.key_column_usage
where constraint_schema = 'YOUR_DB'
대신 외래 키 제약 조건에 대해 이야기하는 경우 information_schema.referential_constraints
다음을 사용하십시오 .
select *
from information_schema.referential_constraints
where constraint_schema = 'YOUR_DB'
information_schema.columns.column_default
.
@Senseful의 훌륭한 답변입니다.
제약 조건 이름 목록 (다른 세부 정보 / 열 제외) 만 찾는 사람들을 위해 수정 된 쿼리를 제시하고 있습니다.
SELECT DISTINCT(constraint_name)
FROM information_schema.table_constraints
WHERE constraint_schema = 'YOUR_DB'
ORDER BY constraint_name ASC;
이것은 ON_UPDATE 및 ON_DELETE와 같은 제약 조건과 열 및 외부 열 이름을 모두 함께 포함하는 규칙뿐만 아니라 기본 및 외래 키 제약 조건을 확인하려는 경우에 유용합니다.
SELECT tc.constraint_schema,tc.constraint_name,tc.table_name,tc.constraint_type,kcu.table_name,kcu.column_name,kcu.referenced_table_name,kcu.referenced_column_name,rc.update_rule,rc.delete_rule
FROM information_schema.table_constraints tc
inner JOIN information_schema.key_column_usage kcu
ON tc.constraint_catalog = kcu.constraint_catalog
AND tc.constraint_schema = kcu.constraint_schema
AND tc.constraint_name = kcu.constraint_name
AND tc.table_name = kcu.table_name
LEFT JOIN information_schema.referential_constraints rc
ON tc.constraint_catalog = rc.constraint_catalog
AND tc.constraint_schema = rc.constraint_schema
AND tc.constraint_name = rc.constraint_name
AND tc.table_name = rc.table_name
WHERE tc.constraint_schema = 'my_db_name'
해당 열에 대한 추가 정보를 추가 할 수도 있습니다.이를 SQL에 추가하고 원하는 열을 선택하기 만하면됩니다.
LEFT JOIN information_schema.COLUMNS c
ON kcu.constraint_schema = c.table_schema
AND kcu.table_name = c.table_name
AND kcu.column_name = c.column_name