컬럼을 생성할 때, 테이블을 안전한게 관리하고 유지하기 우해 제약 조건을 걸어둘 수 있다.
대표적인 예시는 다음과 같다.
1. 이 컬럼은 NOT NULL 이어야 한다
2. 이 컬럼의 데이터는 중복되면 안된다 -> 데이터가 UNIQUE 해야한다.
3. 음수는 들어오면 안되고 무조건 양수만 들어오는지 CHECK
4. 현재 컬럼을 PK 로 지정해야한다.
빈 데이터 금지 - NOT NULL
CREATE TABLE new_table (
id INT NOT NULL,
이름 VARCHAR(100) NOT NULL,
나이 INT
)
이렇게 NOT NULL 옵션을 붙이게 되면, id와 이름은 비어 있을 수 없다.
까먹고 데이터를 입력하지 않으면 커밋이 불가하다.
중복 값 없어야 함 - UNIQUE
CREATE TABLE new_table (
id INT UNIQUE,
이름 VARCHAR(100),
나이 INT
)
이렇게 되면 모든 행에서 반드시 각각 다른 값을 id에 가지고 있게 된다.
다음과 같이 여러 컬럼을 묶어서 작성해도 되는데, 이는 작동 방법이 좀 다르다.
CREATE TABLE new_table (
id INT,
이름 VARCHAR(100),
나이 INT,
UNIQUE(이름, 나이)
)
이름과 나이 두가지 데이터가 완전 equals 해야 데이터 저장을 막는다.
| id | 이름 | 나이 |
| 1 | aaa | 20 |
| 2 | aaa | 21 |
이런 데이터는 저장이 되지만,
| id | 이름 | 나이 |
| 1 | aaa | 20 |
| 2 | aaa | 20 |
이런 데이터는 저장이 되지 않는다.
검증 로직 - CHECK()
CREATE TABLE new_table (
id INT,
이름 VARCHAR(100),
나이 INT CHECK (나이 > 0),
)
check 안에 조건식을 넣어두면, 해당 컬럼에는 음수 작성이 불가하게 된다. 조건식이니 AND, OR 연산자 사용가능.
유일한 식별자 만들기 - PRIMARY KEY
PK에 대한 포스팅은 이전글을 참고하자
[DB Modeling] Primary Key (PK), Foreign Key(FK)
패널티킥, 프리킥 아니다.. 진짜 뒤진다..Primary Key(PK) -> 기본키우리는 서로를 구분할 수 있도록 각자 고유의 주민 번호가 존재한다.주체가 사람이 아닌 다른 객체일 때, 각 객체를 구분하기 위해
bdisappointed.tistory.com
기본키 설정은 다음과 같이 할 수 있는데,
CREATE TABLE new_table (
id INT PRIMARY KEY,
이름 VARCHAR(100),
나이 INT CHECK (나이 > 0),
)
id가 중복되지 않는 유일한 식별자로써 기본키로 사용할 수 있게 된다.
PK 의 국룰 AUTO_INCREMENT
CREATE TABLE new_table (
id INT AUTO_INCREMENT PRIMARY KEY,
이름 VARCHAR(100),
나이 INT,
)
이렇게 컬럼을 생성하면 id컬럼의 값이 저장될 때마다 숫자가 1씩 증가하며 id가 생성된다.
컬럼 다 만들고 마지막에 제약 주기 - CONSTRAINT()
CREATE TABLE new_table (
id INT,
이름 VARCHAR(100),
나이 INT,
PRIMARY KEY (id),
CHECK(나이 > 10)
)
이렇게 컬럼을 다 생성하고 마지막에 제약을 줘도 되지만, 다음과 같이 이름을 부여하여 작성할 수도 있다.
CREATE TABLE new_table (
id INT,
이름 VARCHAR(100),
나이 INT,
CONSTRAINT 제약조건작명 PRIMARY KEY (id),
CONSTRAINT 제약조건작명2 CHECK(나이 > 10)
)
'DataBase > SQL' 카테고리의 다른 글
| [SQL] Stored Procedure 총 정리 + 변수 사용법 정리 (0) | 2025.07.25 |
|---|---|
| [SQL] TABLE 대신 VIEW를 쓰는 이유는 뭘까? (0) | 2025.07.25 |
| [SQL] GUI에 의존하지 말고 DDL 직접 씁시다 (0) | 2025.07.21 |
| [SQL] IF / CASE 조건문 (0) | 2025.07.21 |
| [SQL] 실습용 리그오브레전드 챔피언 테이블 공유 [수정] (0) | 2025.07.21 |