[ Database ] 무결성 제약 조건

5tr1ker·2023년 5월 21일
0

Database

목록 보기
1/5
post-thumbnail

기본키 제약조건

기본키 제약조건은 다수의 데이터 중에 구분할 수 있는 식별자를 말하며 중복과 NULL을 허용하지 않습니다.

기본키 제약조건은 컬럼에 PRIMARY KEY 를 붙여 생성할 수 있습니다.

CREATE TABLE tableName (
num INT PRIMARY KEY
)

primary key는 자동으로 NOT NULL 옵션이 추가되기 때문에 작성하지 않으셔도 됩니다. 또한 기본키는 여러개가 될 수 있으며 제약 조건에 이름을 추가 하고 싶으면

CONSTRAINT 제약조건_이름 PRIMARY KEY (컬럼명)

다음과 같이 설정할 수 있습니다.

외래키 제약조건

외래키 제약 조건은 두 테이블이 연관 관계를 맺어 데이터 무결성을 보장해 주는 역할을 합니다. 외래키는 참조하는 테이블의 컬럼을 갖고 있어야 하기 때문에 참조하는 테이블의 데이터가 먼저 삽입되어 있어야합니다.

선언하는 방법은 다음과 같습니다.

CONSTRAINT 제약조건_이름 FOREIGH KEY ( 컬럼명 ) REFERENCES 테이블명 ( 컬럼명 )

만약 제약조건이름을 설정하지 않는다면 다음과 같이 설정할 수 있습니다.

FOREIGH KEY ( 컬럼명 ) REFERENCES 테이블명 ( 컬럼명 )

외래키 제약조건은 참조하는 테이블의 열은 기본키 또는 Unique 키 여야 합니다.

또한 ON UPDATE CASCADE 를 제약조건 뒤에 추가함으로 기준 테이블의 데이터가 바뀌면 외래키의 데이터도 함께 변경됩니다. 이를 설정하지 않으면 ON UPDATE NO ACTION 이 기본으로 설정됩니다.

반대로 ON DELETE CASCADE 를 통해 참조하는 테이블이 삭제되었을 때 참조하는 테이블도 함께 삭제하게 설정할 수 있습니다.

유니크 제약조건

유니크 제약조건은 중복되지 않는 값을 보장합니다. FRIMARY KEY 와 유사하지만 차이점은 유니크 제약조건은 NULL을 허용합니다. 따라서 NULL은 여러 값이 입력될 수 있지만 값이 입력되는 순간 중복은 허용하지 않습니다. 주로 EMAIL 에서 사용합니다.

유니크 제약 조건 추가하는 방법은 다음과 같습니다.

-- 테이블 생성 시
CREATE TABLE tablename ( num INT UNIQUE );
-- 추가 시
CONSTRAINT AK_name UNIQUE (컬럼명);

CHECK 제약 조건

CHECK 제약 조건은 데이터의 입력값을 검증합니다. 만약 키에 마이너스 값이 들어온다던가 출생 년도가 현재를 벗어나는 등 비정상적인 값을 사전에 방지할 수 있습니다.

CREATE TABLE tablename (
	birthyear INT CHECK (birthyear <= 2023 )
)

다음 과 같이 테이블의 컬럼 바로 뒤에 CHECK 구문을 활용해서 제약 조건을 추가할 수 있습니다. 제약 조건은 SELECT 문의 WHERE 에 나오는 조건문 처럼 작성하면 됩니다.

만약 이미 생성된 테이블에 CHECK 제약 조건을 추가해야 한다면 다음과 같이 설정할 수 있습니다.

ALTER TABLE tablename (
	ADD CONSTRAINT 제약조건_이름
    CHECK ( 조건들.. )
)

만약 제약 조건을 만들되 작동하지 않도록 하려면 컬럼의 맨 뒤에 NOT ENFORCED 를 입력합니다.

DEFAULT

DEFAULT는 값이 입력되지 않았을 때 자동으로 입력되는 기본 값을 정의합니다. 어떤 컬럼에 값을 넣지 않았을 때 기본 값으로 지정해줄 때 사용합니다.

CREATE TABLE tablename (
	name CHAR(5) NOT NULL DEFAULT '빈 값'
)

만약 ALTER TABLE 키워드를 이용해 제약 조건을 추가하고 싶으면 다음과 같이 입력합니다.

ALTER TABLE tablename ALTER COLUMN 컬럼값 SET DEFAULT '기본값'

ALTER COLUMN 을 사용하는 것에 주목하면 됩니다.

NOT NULL

NULL 값을 허용한다면 NULL , 허용하지 않는 다면 NOT NULL 키워드를 붙여줍니다. PRIMARY KEY 같은 경우는 설정하지 않으면 자동으로 NOT NULL 키워드가 붙습니다. NULL은 값이 아무것도 없다 라는 의미이기 때문에 빈 문자열 ( '' ) 과 0 과는 다른 값 입니다.

추가적으로 NULL 은 고정 문자열 ( CHAR ) 의 경우에는 공간을 모두 차지하지만 가변 문자열 ( VARCHAR ) 는 공간을 차지하지 않습니다. 따라서 삽입 삭제 수정이 많이 일어나면 고정 문자열을 사용하고 , NULL 값이 많이 사용되면 가변 문자열을 사용합니다.

profile
https://github.com/5tr1ker

0개의 댓글