🎉

8. 보너스챕터 : 제약조건(Constraint)

1. 제약조건이란

  • 테이블에 잘못된 데이터의 출입은 막고, 맞는 데이터만 들여보내기 위해서 사용합니다.
  • 데이터의 정확성과 일관성을 위해 정의된 규칙입니다.
  • 딕셔너리에 저장됩니다.
 

2. 제약조건의 종류

제약 조건의 종류
제약조건
설명
NULL값을 포함할 수 없습니다.
중복되는 값을 입력할 수 없습니다.(NULL값은 중복 입력이 가능합니다.)
사용자가 가지고 있는 고유한 값입니다.(NOT NULL + 유니크)
다른 테이블의 컬럼을 참조해서 검사를 실행합니다.
사용자가 설정한 값만 입력가능 하며, 나머지는 입력할 수 없습니다.
 
 

3. 제약조건 구문 형식

3.1 NOT NULL

CREATE TABLE 테이블명 (컬럼명1 데이터 타입 NOT NULL, 컬럼명2 데이터 타입 NULL, 컬럼명3 데이터 타입);
 

3.2 UNIQUE

CREATE TABLE 테이블명 (컬럼명1 데이터 타입 UNIQUE, 컬럼명2 데이터 타입, 컬럼명3 데이터 타입, 컬럼명4 데이터 타입, UNIQUE CONSTRAINT 제약명 UNIQUE(컬럼2, 컬럼3));
 

3.3 Primary key(기본키)

CREATE TABLE 테이블명 (컬럼명1 데이터 타입 PRIMARY KEY, 컬럼명2 데이터 타입); OR CREATE TABLE 테이블명 (컬럼명1 데이터 타입, 컬럼명2 데이터 타입 CONSTRAINT 기본키 이름 PRIMARY KEY(컬럼2));
 

3.4 Foreign key(외래키)

create TABLE 테이블명 (컬럼명1 데이터 타입 CONSTRAINT 외래키 이름 REFERENCES 참조테이블명(참조컬럼), 컬럼명2 데이터 타입); OR CREATE TABLE 테이블명 (컬럼명1 데이터 타입, 컬럼명2 데이터 타입 CONSTRAINT 외래키 이름 FOREIGN KEY(컬럼1) REFERENCES 참조테이블명(참조컬럼));
 

3.5 CHECK

CREATE TABLE 테이블명 (컬럼명1 데이터 타입 CONSTRAINT 제약명 CHECK(조건), 컬럼명2 데이터 타입);
 

4. 실습

4.1 NOT NULL

입력
create table student( name varchar(20) not null, age int null, address varchar(20), school varchar(20) ) #정상출력 insert into student(name, age, address, school) values("홍길동", 13, "Jeju", "A school") #오류 발생 insert into student(name, age, address, school) values(null, 13, "Jeju", "A school")
 
정상출력
notion imagenotion image

4.2 UNIQUE

입력
create table student( name varchar(20) unique, age int, address varchar(20), school varchar(20) ) #정상출력 insert into student(name, age, address, school) values("홍길동",13,"Jeju","A school"); insert into student(name, age, address, school) values("홍길남",15,"Seoul","B school"); #오류출력 insert into student(name, age, address, school) values("홍길동",13,"Jeju","A school"); insert into student(name, age, address, school) values("홍길동",15,"Seoul","B school");
 
정상출력
notion imagenotion image
 

4.3 Primary key(기본키)

입력
create table student( name varchar(20), age int, address varchar(20) Primary key, school varchar(20) ) #정상출력 insert into student(name, age, address, school) values("홍길영",14,"Busan","A school"); insert into student(name, age, address, school) values("홍길순",16,"Ulsan","B school"); #오류출력 insert into student(name, age, address, school) values("홍길영",14,"Busan","A school"); insert into student(name, age, address, school) values("홍길순",16,"Busan","B school");
 
정상출력
notion imagenotion image

4.4 Foreign key(외래키)

입력
create table teacher( teacherID int primary key, age int, subject varchar(20) ); create table( studentID varchar(20) primary key, age int, teacherID int foreign key references teacher(teacherID) );
 
출력
Foreign key(외래키) 지원하지 않음

4.5 CHECK

입력
create table student( name varchar(20), age int ckeck(age>= 8 and age <= 19), address varchar(20), school varchar(20) ) #정상출력 insert into student(name, age, address, school) values("홍길동",13,"Jeju","A school"); #오류출력 insert into student(name, age, address, school) values("홍길동",22,"Jeju","A school");
 
정상출력
notion imagenotion image