새소식

Database/MySQL

[MySQL] 컬럼에 Constraints 설정

  • -

NOT NULL

해당 컬럼에는 NULL 값을 입력해서는 안된다.

CREATE TABLE 테이블명 (
	컬럼명 int NOT NULL
);

 

 

UNIQUE

해당 컬럼 안에서는 모든 행의 데이터가 각각 다른 데이터여야한다.

CREATE TABLE 테이블명 (
	컬럼명 int UNIQUE
);

 

 

가장 하단에 UNIQUE(컬럼명1, 컬럼명2, ...) 처럼도 사용할 수 있다.

CREATE TABLE 테이블명 (
	컬럼명1 int,
    컬럼명2 varchar(100),
    UNIQUE(컬럼명1, 컬럼명2)
);

그러나 이렇게 사용할 경우, 컬럼명1과 컬럼명2의 값이 둘 다 같을 경우에만 제약을 건다.

즉, 컬럼명1의 데이터는 같지만 컬럼명2의 데이터만 다르다면 저장을 허용한다.

 

 

 

CHECK( )

check() 안에 컬럼에 들어갈 제약 조건식을 입력하여 제약을 줄 수 있다.

CREATE TABLE 테이블명 (
    컬럼명 int CHECK(컬럼명 > 0)
);

 

 

 

PRIMARY KEY

primary key는 각 행을 구분짓기 위해 각각 유니크한 데이터를 담고있는 컬럼을 의미한다.

예를들어 반에 동명이인의 학생이 있다면 서류 상 이 둘을 구별하는 방법은 유니크한 학번일 것이다.

여기서 학번 컬럼을 PRIMARY KEY라고 부른다.

CREATE TABLE 테이블명 (
    id INT PRIMARY KEY
);

 

 

 

AUTO_INCREMENT

해당 제약조건을 사용하면 행이 추가될 때 마다 자동으로 1씩 증가된 값이 저장된다.

주로 PRIMARY KEY와 함께 사용한다.

CREATE TABLE 테이블명 (
    id INT AUTO_INCREMENT PRIMARY KEY
);

 

 

 

CONSTRAINT

제약조건을 아래 따로 사용해 줄 수도 있다.

CREATE TABLE 테이블명 (
    컬럼명1 INT,
    컬럼명2 INT,
    PRIMARY KEY (컬럼명1),
    CHECK(컬럼명2 > 0)
);

 

제약조건마다 이름을 붙여주고 싶다면 CONTSTRAINT 문법을 사용한다.

에러 발생 시 붙여준 이름의 제약조건 때문에 에러가 난다고 알려주기 때문에 잘못된 부분을 찾기 편하다.

CREATE TABLE 테이블명 (
    컬럼명1 int,
    컬럼명2 int,
    CONSTRAINT 제약조건명1 PRIMARY KEY (컬럼명1),
    CONSTRAINT 제약조건명2 CHECK(컬럼명2 > 0)
);

 

 

 

※ 이미 생성된 컬럼에 제약을 추가해주고 싶다면

ALTER TABLE 테이블명 MODIFY 컬럼명 int NOT NULL;

 

 

FOREIGN KEY 설정

테이블을 생성할 때 설정

CREATE TABLE 테이블명 (
    컬럼명1 datatype 제약조건1,
    컬럼명2 datatype 제약조건2,
    ...
    CONSTRAINT 제약조건명 FOREIGN KEY (컬럼명2) REFERENCES 테이블명 (참조할컬럼명)
);

 

CREATE TABLE mart.program (
	id int AUTO_INCREMENT PRIMARY KEY,
	프로그램 varchar(100),
	가격 int,
	강사id int,
	CONSTRAINT 강사id FOREIGN KEY (강사id) REFERENCES mart.teacher(id) ON UPDATE CASCADE 
);

 

 

 

 ALTER문으로 설정(추가, 수정)

ALTER TABLE 테이블명
ADD CONSTRAINT 제약조건명
FOREIGN KEY (컬럼명)
REFERENCES 참조할테이블명 (참조할컬럼명)

 

ALTER TABLE mart.program 
ADD CONTSTRAINT 강사id
FOREIGN KEY (강사id)
REFERENCE mart.teacher (id);

 

FOREIGN KEY 제약조건 삭제

※ FOREIGN KEY를 설정할 때 CONSTRAINT을 사용해서 제약조건명을 사용해주었다면 이를 이용해서 해당 조건 삭제가 가능하다.

 

ALTER TABLE 테이블명
DROP FOREIGN KEY 제약조건이름

 

 

ON DELETE, ON UPDATE

외래키에 의해 참조되는 테이블에서 데이터의 수정이나 삭제가 발생하면, 참조하고 있는 테이블의 데이터도 영향을 받는다.

이때 참조하고 있는 테이블의 동작을 ON DELETE, ON UPDATE 키워드를 이용하여 미리 설정할 수 있다.

CASCADE 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블에서도 삭제와 수정이 같이 이루어집니다.
SET NULL 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 NULL로 변경됩니다.
NO ACTION  참조되는 테이블에서 데이터를 삭제하거나 수정해도, 참조하는 테이블의 데이터는 변경되지 않습니다.
SET DEFAULT 참조되는 테이블에서 데이터를 삭제하거나 수정하면, 참조하는 테이블의 데이터는 필드의 기본값으로 설정됩니다.
RESTRICT 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터를 삭제하거나 수정할 수 없습니다.

 

728x90

'Database > MySQL' 카테고리의 다른 글

[MySQL] LEFT JOIN / RIGHT JOIN  (0) 2023.03.09
[MySQL] INNER JOIN  (0) 2023.03.06
[MySQL] DDL (테이블/컬럼 생성/수정/삭제)  (0) 2023.03.06
[MySQL] IF / CASE  (0) 2023.03.04
[MySQL] 그룹지어 통계내기 (GROUP BY)  (0) 2023.03.04
Contents