제약 조건은 데이터베이스에서 데이터의 무결성을 보장하기 위해 설정하는 규칙입니다. 제약 조건을 통해 테이블에 삽입되는 데이터의 형식과 일관성을 유지할 수 있으며, 잘못된 데이터 입력을 방지합니다.
제약 조건 | 설명 | 키워드 |
---|---|---|
필수 입력 | 특정 열에 반드시 값이 있어야 함 | NOT NULL |
중복 방지 | 중복된 값을 허용하지 않음 | UNIQUE |
필수 + 중복 방지 | 고유하고 NULL 값이 없는 기본 키 | PRIMARY KEY |
참조 | 다른 테이블의 값을 참조하여 일관성 유지 | FOREIGN KEY |
값 검사 | 특정 조건을 만족하는 값만 허용 | CHECK |
기본값 설정 | 값을 입력하지 않으면 기본값이 자동 입력됨 | DEFAULT |
컬럼 단위 - 컬럼을 생성할 때 정의
CREATE TABLE 테이블명 (
컬럼명 자료형(크기) 제약조건,
컬럼명 자료형(크기) 제약조건,
컬럼명 자료형(크기)
)
테이블 단위 - 컬럼생성 완료 후 정의
CREATE TABLE 테이블명 (
컬럼명 자료형(크기),
컬럼명 자료형(크기),
컬럼명 자료형(크기),
제약조건
)
테이블에 설정된 제약조건을 확인하는 방법은 information_schema
스키마의 테이블을 활용합니다.
MySQL/MariaDB에서 기본으로 제공되는 스키마는 information_schema
, mysql
, performance_schema
, sys
등이 있으며, 각각 데이터베이스의 내부 정보를 관리하고 접근하는 데 사용됩니다.
스키마명 | 설명 | 학습 키포인트 |
---|---|---|
information_schema | 데이터베이스 메타데이터 조회. 테이블, 열, 제약조건, 권한 등의 구조를 파악할 때 사용 | 테이블과 열의 구조, 인덱스 조회, 제약조건 확인 |
mysql | 사용자 계정, 권한 및 서버 설정 정보를 담고 있는 운영 스키마 | 사용자 관리, 권한 설정 방법 |
performance_schema | 서버의 성능 데이터 수집. 쿼리 성능 분석, 리소스 사용량 모니터링 등에 유용 | 성능 분석, 대기 시간 분석, 쿼리 최적화 |
sys | 성능 스키마를 쉽게 사용할 수 있도록 제공되는 뷰 모음. 직관적인 시스템 모니터링 | 성능 데이터 조회, 시스템 자원 사용량 모니터링 |
information_schema.table_constraints
테이블information_schema
라는 특별한 스키마에 있는 table_constraints
테이블에서 데이터를 조회합니다. 이 테이블은 모든 데이터베이스의 테이블에 설정된 제약조건에 대한 정보를 저장하고 있습니다.
MariaDB [sample]> desc information_schema.table_constraints;
+--------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+--------------+------+-----+---------+-------+
| CONSTRAINT_CATALOG | varchar(512) | NO | | NULL | |
| CONSTRAINT_SCHEMA | varchar(64) | NO | | NULL | |
| CONSTRAINT_NAME | varchar(64) | NO | | NULL | |
| TABLE_SCHEMA | varchar(64) | NO | | NULL | |
| TABLE_NAME | varchar(64) | NO | | NULL | |
| CONSTRAINT_TYPE | varchar(64) | NO | | NULL | |
+--------------------+--------------+------+-----+---------+-------+
constraint_name
: 제약조건의 이름을 반환합니다. 각 제약조건마다 고유한 이름이 있습니다.table_schema
: 제약조건이 설정된 스키마(데이터베이스) 이름을 반환합니다. 이 경우, 'sample'이라는 데이터베이스 안에 있는 제약조건들이 조회됩니다.table_name
: 제약조건이 설정된 테이블 이름을 반환합니다.constraint_type
: 제약조건의 유형을 반환합니다. 주로 PRIMARY KEY
, FOREIGN KEY
, UNIQUE
, CHECK
등이 포함될 수 있습니다.sample
스키마에 존재하는 모든 테이블의 제약조건 목록을 조회하는 SQL 쿼리MariaDB [sample]> select constraint_name, table_schema, table_name, constraint_type
-> from information_schema.table_constraints
-> where constraint_schema = 'sample';
+-----------------+--------------+------------+-----------------+
| constraint_name | table_schema | table_name | constraint_type |
+-----------------+--------------+------------+-----------------+
| PRIMARY | sample | dept | PRIMARY KEY |
| PRIMARY | sample | emp | PRIMARY KEY |
| fk_emp_dept | sample | emp | FOREIGN KEY |
+-----------------+--------------+------------+-----------------+