웹개발/SQL(mySQL)

MySQL 제약조건(Constraints)

bergerac 2025. 6. 15. 09:11

제약 조건(Constraints) 이란?

: 데이터의 정확성, 일관성, 신뢰성, 무결성을 유지하기 위해 DB 시스템에서 강제하는 규칙이다.

 

제약 조건을 사용하는 목적

  • 잘못된 데이터 입력을 방지
  • 테이블 간 관계를 명확히 유지
  • 신뢰할 수 있는 데이터베이스 상태 유지

제약 조건의 종류

  1. PRIMARY KEY
  2. FOREIGN KEY
  3. UNIQUE
  4. CHECK
  5. NOT NULL
  6. DEFAULT

1. PRIMARY KEY (기본 키)

  • 테이블의 각 행을 고유하게 식별할 수 있는 열
  • 중복 불가 + NULL 불가
  • 테이블당 하나만 설정 가능
create table students (
	student_id int primary key,
	name varchar(100),
	major varchar(100)
);

 

또는 아래와 같이 마지막에 명시할 수도 있다:

create table students (
	student_id int,
	name varchar(100),
	major varchar(100),
	primary key (student_id)
);

 

기본 키 제약 조건 수정 

-- 삭제
alter table students drop primary key;

-- 다시 추가
alter table students add primary key (student_id);

 

✅ 복합 키 (Composite Primary Key)

기본 키는 하나의 열만이 아니라 여러 컬럼을 조합하여 설정할 수도 있다.

create table enrollments (
	student_id int,
	course_id int,
	primary key (student_id, course_id)
);
  • 각각의 컬럼은 중복될 수 있지만, 조합된 값은 반드시 유일해야 한다.

2. FOREIGN KEY (외래 키)

  • 두 테이블 간 관계를 연결하는 역할
  • 참조하는 테이블의 기본 키를 기준으로 설정
  • 데이터의 연관성을 강제하며, 잘못된 참조를 막는다
create table members (
	member_id int primary key,
	name varchar(100)
);

create table orders (
	order_id int primary key,
	order_date date,
	member_id int,
	foreign key (member_id) references members(member_id)
);

 

외래 키 제약 조건 수정

-- 외래 키 삭제
alter table orders drop foreign key orders_ibfk_1;

-- 외래 키 다시 추가
alter table orders add constraint
	foreign key (member_id)
	references members(member_id);

 

외래 키 제약 조건 이름 확인

select constraint_name
from information_schema.key_column_usage
where table_name = 'orders' and column_name = 'member_id';

 

✅ 외래 키: ON DELETE / ON UPDATE

외래 키 설정 시 참조 대상이 삭제되거나 변경될 경우의 동작을 명시할 수 있다.

create table orders (
	order_id int primary key,
	member_id int,
	foreign key (member_id)
		references members(member_id)
		ON DELETE CASCADE
		ON UPDATE CASCADE
);
  • ON DELETE CASCADE: 참조 대상 삭제 시, 해당 데이터도 함께 삭제됨
  • ON DELETE SET NULL: 참조 대상 삭제 시, 해당 값을 NULL로 설정
  • ON DELETE RESTRICT: 참조 중이면 삭제 금지 (기본값)
  • ON UPDATE CASCADE: 참조 대상 값 변경 시, 해당 값도 같이 변경됨

3. UNIQUE

  • 특정 컬럼의 값이 모두 고유해야 함
  • 한 테이블에 여러 개 설정 가능
  • NULL 값은 허용된다 (PK와의 차이점)
create table users (
	user_id int primary key,
	user_email varchar(100) unique,
	user_number varchar(100) unique
);

4. CHECK

  • 입력되는 값이 특정 조건을 만족해야 한다
  • MySQL 8.0.16 이상에서만 유효하게 동작
create table employees (
	id int primary key,
	name varchar(100),
	age int,
	check (age >= 20)
);
-- 실패 예시
insert into employees values (2, '조민지', 19); -- ❌ 조건 위반

-- 성공 예시
insert into employees values (1, '진우태', 20);

5. NOT NULL

  • 해당 컬럼은 절대 비워질 수 없음
  • 기본 키에 대해서는 자동으로 NOT NULL이 포함됨
create table contacts (
	contact_id int primary key,
	name varchar(100) not null,
	phone varchar(100) not null
);
-- 실패 예시
insert into contacts values (2, '양현석', null); -- ❌ phone에 NULL 불가

6. DEFAULT

  • 데이터를 삽입할 때 해당 컬럼에 값이 없으면 기본값을 자동으로 설정
create table cart (
	cart_id int primary key,
	product_name varchar(100),
	quantity int default 1
);

-- quantity를 명시하지 않아도 기본값 1 삽입
insert into cart (cart_id, product_name) values (4, '이어폰');

 

주의! NULL을 명시하면 DEFAULT는 무시된다.

insert into cart values (2, '스마트폰', null); -- ❌ null 그대로 들어감

 

 

'웹개발 > SQL(mySQL)' 카테고리의 다른 글

MySQL SELECT 문 사용방법  (0) 2025.06.17
MySQL DML 문법 (INSERT, UPDATE, DELETE)  (0) 2025.06.16
무결성(Integrity)  (1) 2025.06.14
MySQL 명명규칙  (1) 2025.06.13
MYSQL DataType  (2) 2025.06.12