Don't forget to smile
[혼자 공부하는 SQL] Chapter 5-2. 제약조건으로 테이블을 견고하게 본문
제약조건(constraint) : 데이터의 무결성을 지키기 위해 제한하는 조건
기본 키, 외래 키, 고유 키, 체크, 기본값, NOT NULL 등
데이터의 무결성 : 데이터에 결함이 없음을 뜻함
예시로 아이디가 중복되어 이메일, 블로그, 쇼핑 기록 등이 혼란을 초래하는 경우를 들 수 있음
<Primary Key(기본 키) 제약조건>
기본 키에 입력되는 값은 중복될 수 없으며 NULL 값이 입력될 수 없음
테이블에 존재할 수 있는 기본 키는 단 1개

1) CREATE TABLE에서 기본 키를 지정할 경우 PRIMARY KEY라는 예약어를 입력
위 코드에선 mem_id 열을 기본 키로 설정하였음

2) 또는 마지막 행에 PRIMARY KEY (mem_id)를 추가하는 방법도 가능

3) 이미 만들어진 테이블을 수정하는 ALTER TABLE 구문을 사용하여 기본 키를 설정하는 것도 가능
위 코드처럼 ADD CONSTRAINT 명령으로 제약조건을 추가한 후 기본 키를 설정
<Foreign Key(외래 키) 제약조건>
외래 키는 두 테이블 사이의 관계를 연결하고 해당 사이의 무결성을 보장
외래 키는 반드시 타 테이블의 기본 키와 연결

1) CREATE TABLE에서 외래 키를 지정할 경우 FOREIGN KEY(열_이름) REFERENCES 기준_테이블(열_이름) 문법을 사용
위 코드에선 buy 테이블의 mem_id가 member 테이블의 mem_id의 외래 키로 지정되었음

2) ALTER TABLE에서 설정하는 경우도 기본 키와 마찬가지로 ADD CONSTRAINT로 제약조건 생성 후 FOREIGN KEY 사용



3) 하지만 기준 테이블이 되는 member의 열이 변경되는 경우 오류가 발생할 수 있음
위 코드는 member 테이블의 mem_id를 BLK에서 PINK로 변경하는 명령이지만 오류가 발생
이유는 기본 키-외래 키로 맺어진 후에는 기준 테이블의 열 이름이 변경되지 않기 때문

4) 이 때 ON UPDATE CASCADE와 ON DELETE CASCADE 문을 사용하면 문제 해결이 가능
ON UPDATE CASCADE 문은 기준 테이블 열 이름이 변경 시 참조 테이블도 자동으로 변경되는 역할을 하고
ON DELETE CASCADE 문은 기준 테이블의 열이 삭제될 때 참조 테이블의 열도 함께 삭제됨
<UNIQUE KEY(고유 키) 제약조건>
고유 키는 중복되지 않는 유일한 값을 입력해야 하는 제약조건
기본 키와 거의 비슷하지만, 고유 키는 NULL을 허용한다는 차이점이 존재
또한 기본 키와 다르게 고유 키는 여러 개 설정이 가능

1) 고유 키는 설정 시 원하는 열에 UNIQUE 명령을 입력
위 코드는 중복되지 않는 이메일 주소를 고유 키로 설정


2) 위와 같이 데이터를 입력할 경우 이메일 주소가 중복되므로 고유 키를 만족하지 못해 입력 에러가 발생
<CHECK(체크) 제약조건>
체크는 입력되는 데이터를 점검하는 기능을 수행
예를 들어 평균 키에 마이너스 값이 입력되지 않게 하거나, 연락처의 국번을 지정하는 등의 기능 수행 가능

1) 체크는 열의 정의 뒤에 CHECK(조건)을 추가하는 식으로 동작
위 코드는 키가 100 이상인 값만 입력 가능하게 조건을 부여


2) 제약조건인 100 이상이라는 키에 맞지 않는 99라는 데이터를 입력 시도했으므로 에러 발생

3) 체크 역시 ALTER TABLE에서 부여 가능
<DEFAULT(기본값) 정의>
기본값은 값을 입력하지 않았을 때 자동으로 입력되는 값을 의미함
기본값 정의는 해당 기본값을 미리 정의해 놓는 방법


1) 기본값은 DEFAULT 기본값과 같은 문법으로 동작
위 코드는 각각 키에 160, 국번에 02라는 값이 기본값으로 출력되게 지정하는 코드

2) 기본값 사용은 기본값이 설정된 열에 default를 써 주면 설정한 기본값이 자동으로 출력
<널 값 허용>
NULL은 아무 값도 없다는 의미이므로 NULL을 허용하려면 제약조건에 NULL, 허용 불가 시 NOT NULL 사용
'SQL' 카테고리의 다른 글
| [혼자 공부하는 SQL] Chapter 6-1. 인덱스 개념을 파악하자 (0) | 2022.12.07 |
|---|---|
| [혼자 공부하는 SQL] Chapter 5-3. 가상의 테이블: 뷰 (0) | 2022.12.05 |
| [혼자 공부하는 SQL] Chapter 5-1. 테이블 만들기 (1) | 2022.11.30 |
| [혼자 공부하는 SQL] Chapter 4-3. SQL 프로그래밍 (0) | 2022.11.29 |
| [혼자 공부하는 SQL] Chapter 4-2. 두 테이블을 묶는 조인 (0) | 2022.11.28 |