본문 바로가기
Databases/SQL

MYSQL 제약조건 알아보기 | NOT NULL | UNIQUE 등

by CodeMia 2022. 1. 7.

이메일을 입력하는 자리에 숫자를 입력하거나 

이름 입력란에 백 글자를 입력하는 사람들이 있을 수 있다. 

이런 경우를 대비해 입력시 제약을 걸어둬서

더 정확하고 확실한 데이터를 입력받을 수 있다.

 

데이터 타입을 제한하고

테이블 전체에 제약을 걸어 둘 수 있고, 

각 column에 걸 수도 있다. 

 

 

자주 사용되는 MYSQL Constraints

 

NOT NULL 

빈 칸으로 두면 안된다, 꼭 입력하라는 뜻이다.

보통 table 만들 때 "id", "first name", "last name" column 등을

빈 칸으로 두면 안되니 NOT NULL로 설정한다.

 

not null vs null:

mysql 기본은 null로 되어있다.

null은 데이터를 입력하지 않은 것은 빈 칸을 의미한다. 

고객에게 전화번호를 입력하라고 했는데

개인 정보라 입력하지 않았다면 null 이된다. 

null: empty value is stored 

 

 

UNIQUE 

column에 있는 모든 values들이 달라야한다. 

A PRIMARY KEY는 자동으로 UNIQUE 제약 사항을 가진다. 

테이블에서 A PRIMARY KEY는 하나만 가능하고  UNIQUE는 여러 개 가능하다.

 

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    UNIQUE (ID)
);

 

 

PRIMARY KEY 

꼭 데이터를 채워야 하고,

같은 column안에서 다른 칸과 데이터가 중복되면 안된다. 

NOT NULL와  UNIQUE가 합쳐진 것이다. 

A table can have only ONE primary key; and in the table, this primary key can consist of single or multiple columns (fields).

 

 

"ID" 에 PRIMARY KEY를 설정 예시

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID)
);

 

 

FOREIGN KEY 

Persons 와 Orders 두 테이블이 있을 때 

Persons Table

ID Last Name First Name Age 
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20

Orders Table

ID Order Number Person ID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Orders 테이블 안에 주문한 사람 이름을 일일이 적어주는 것이 아닌 Person ID로 대신하고 있다.

여기서 Orders 테이블 안 Person ID가 FOREIGN KEY 이다. 

Persons 테이블에 있는 그냥 ID는 PRIMARY KEY 이다. 

 

여기서 FOREIGN KEY가 들어있는 Orders 테이블을 Child Table이라 하고, 

Persons 테이블을 Parent Table 또는 Referenced Table 이라고 한다. 

 

FOREIGN KEY  예시

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

 

 

CHECK 

column 안에 위치 할 수 있는 value 범위를 한정한다

 

CHECK 예시

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CHECK (Age>=18)
);

 

 

DEFAULT 

데이터 입력 안하면 미리 정한 기본 값이 들어간다. 

 

 

DEFAULT 예 

city 입력 안하면 서울로 설정한다. 

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255) DEFAULT 'Seoul'
);

 

함수를 넣을 수도 있다.

오늘 날짜가 들어가도록 설정하였다. 

CREATE TABLE Orders (
    ID int NOT NULL,
    OrderNumber int NOT NULL,
    OrderDate date DEFAULT GETDATE()
);

 

 

CREATE INDEX 

테이블 안에 인덱스를 만들 때 사용한다. 

인덱스를 만들어 놓으면 데이터베이스 안에 있는 데이터를 불러올 때 빨리 찾을 수 있다. 

 

데이터 업데이트 할 때 인덱스가 있으면 같이 업데이트 해야하기에 업데이트 시간이 길어진다.

그래서 자주 검색해야하는 경우에만 만든다. 

 

인덱스 예

CREATE INDEX index_name
ON table_name (column1, column2, ...);

 

 

 

-- 출처 -- 

https://www.w3schools.com/sql/default.asp

'Databases > SQL' 카테고리의 다른 글

SQL INNER JOIN  (0) 2022.01.08
mysql CRUD  (0) 2022.01.06
맥에서 mysql 다운받는 법(Monterey OS)  (0) 2022.01.05
데이터베이스 SQL vs NOSQL  (0) 2021.11.12

댓글