제약조건 : 데이터의 무결성을 지키기 위해 제한된 조건을 의미한다. 중복을 허용하지 않거나, NULL 값을 허용하지 않거나 등의 데이터를 입력받는 것에 있어 실행되는 검사 규칙을 의미한다.
제약조건의 종류
-
PRIMARY KEY : 중복 X, NULL X.
-
UNIQUE KEY : 중복 x, NULL o,
-
FOREIGN KEY : 중복 o, 타 자료를 참조(references)하여 사용하는 key. 예를 들어 학생정보 테이블에 수강 정보가 같이 들어있다면 여러 과목을 수강할 때 학생정보를 기본키로 사용할 수 없다(학생 정보가 중복으로 들어가기 때문). 이럴 때는 수강 정보 테이블을 따로 두어 중복을 허용할 수 있다.)
-
NOT NULL : Null을 허용하지 않음
-
Default
-
CHECK
PRIMARY KEY(기본키)
-
중복과 Null값을 허용하지 않는 제약조건이다.
-
회원가입 아이디, 닉네임, 주민등록번호, 학번 등 다양한 곳에 이용된다.
-
다음과 같은 방법을 통해서 학번을 PRIMARY KEY 로 가지는 Student 테이블을 만들 수 있다.
create table Student(
ID int PRIMARY KEY,
Name varchar(10),
Major varchar(20),
Grade int);
-
중복을 허용하지 않기 때문에 만약 이미 존재하는 ID를 가진 자료를 입력하면 오류가 발생할 것이다.
Insert into Student(ID, Name, Major, Grade) Values(20180001, ‘Tom’, ‘Mathematics’, 3);
Insert into Student(ID, Name, Major, Grade) Values(20180001, ‘Jerry’, ‘English’, 3);
-> ERROR 1062 (23000): Duplicate entry '20180001' for key 'student.PRIMARY' //중복 비허용 에러
FOREIGN KEY(외래키)
-
말 그대로 다른 테이블의 기본키를 참조하는 열을 말하며, 외부의 자료를 가져온다고 하여 외래키, 참조키라고 이야기한다.
-
원본파일에 대한 보호, 정보에 대한 관계 파악에 대한 편리성으로 사용하나 실제로 forenign key를 사용함에 있어서 자료 편집등에 불편함이 있어 잘 사용하지 않는다.
-
수강 정보, 주문 정보 등 한 사람이 여러개의 정보를 가지고 있을 경우에는 학번이나 ID는 중복을 할 수 없으니 처리할 수 없는 경우가 생긴다. 이럴 경우 학생정보테이블에서 수강정보테이블을 새로 만들어 관리하거나, 회원 정보테이블에서 주문정보테이블을 만들어 관리하는 등의 관리가 필요한데, 이럴 때 외래키를 사용하기로 한다.
-
외래키를 사용하는 테이블의 생성은 다음과 같다.
create table univ_camp(
CampName varchar(20),
CampID int,
FOREIGN KEY(CampID) references Student(ID),
Name varchar(20),
Major varchar(20),
Grade int);
-
외래키의 입력은 다음과 같이 사용할 수 있다.
Insert into univ_camp(CampName varchar(20), CampID, Name, Major, Grade) Values(‘IT취업 캠프’, 2018001, ‘Tom’, ‘Mathematics’, 3);
-
다만 외래키는 참조하는 대상인 기본키에 있는 대상만을 입력할 수 있다. 예를 들어
Insert into univ_camp(CampName, CampID, Name, Major, Grade)
Values('IT취업 캠프', 20180010, 'Tom', 'Mathematics', 3);
이런 입력을 했다면 에러가 발생한다.
그 이유는 20180010이라는 학번은 Student의 ID에 존재하지 않는 학번이기 때문이다.
-
또한 중복을 허용하기 때문에 같은 자료에 대한 정보를 여러번 입력할 수도 있다.
'DBMS 수업정리' 카테고리의 다른 글
DBMS(5)-ALTER 사용법 (0) | 2020.09.16 |
---|---|
DBMS(4)-단순한 자료조회연습3 (0) | 2020.09.14 |
DBMS(3)-단순한 자료조회연습2 (0) | 2020.09.14 |
DBMS(2)-단순한 자료조회연습 (0) | 2020.09.14 |
DBMS(1)-CRUD 연습 (0) | 2020.09.13 |