본문 바로가기

Language/MySQL

[MySQL] 제약

CREATE TABLE로 테이블을 정의할 경우, 열 이외에 제약도 정의할 수 있다.

테이블에 제약을 설정함으로써 저장될 데이터를 제한할 수 있다.

NOT NULL 제약 외에도 기본키(Primary Key) 제약이나 외부 참조(정합) 제약 등이 있다.

외부 참조(정합) 제약
복수의 테이블 사이에서 정합성을 유지하기 위해 설정하는 것으로 테이블 간에는 부모 자식과 같은 관계를 가지며 정합성을 유지한다. 자식 테이블에서는 외부 키(Foreign Key)를 지정해 부모 테이블을 참조한다. 부모 테이블에서 참조될 열은 반드시 유일성(Unique Key, Primary Key)을 가진다

 

a 열에는 NOT NULL 제약, b 열에는 NOT NULL, UNIQUE 제약이 걸려있다.

이처럼 열에 대해 정의하는 제약을 '열 제약'이라 부른다.

 

복수 열에 의한 기본키 제약처럼 한 개의 제약으로 복수의 열에 제약을 설정하는 경우 '테이블 제약'이라 부른다.

제약에는 이름을 붙일 수 있는데, 제약에 이름을 붙이면 나중에 관리가 쉬워지기 때문에 가능하면 이름을 붙이는 게 좋다.

제약 이름은 CONSTRAINT 키워드를 사용해서 지정한다.

 

 

열 제약을 추가할 경우 ALTER TABLE로 열 정의를 변경할 수 있다.

테이블을 변경할 경우 제약을 위반하는 데이터가 있는지 먼저 검사하는데, 제약을 위반하는 데이터가 있을 경우 ALTER TABLE 명령은 에러가 발생한다.

 

 

테이블 제약을 추가할 경우 ALTER TABLE의 ADD 하부 명령으로 추가할 수 있다.

기본키는 테이블에 하나만 설정할 수 있는데, 이미 기본키가 설정되어 있는 테이블에 추가로 기본키를 작성할 수 없다.

열 제약을 추가할 때와 마찬가지로 기존의 행을 검사해 추가할 제약을 위반하는 데이터가 있으면 에러가 발생한다.

 

 

제약은 나중에 삭제도 가능하다. 

열 제약의 경우 제약 추가와 동일하게 열 정의를 변경하면 된다.

 

테이블 제약을 삭제하려면 ALTER TABLE의 DROP 하부 명령으로 삭제가 가능하다.

삭제할 때는 제약명을 지정하면 된다.

alter table sample631 drop constraint pkey_sample631;

이렇게 삭제하면 되는데 MySQL에서는 에러가 발생한다.

MySQL에서는 위처럼 삭제하면 테이블 제약을 삭제할 수 있다.

기본키는 테이블당 하나만 지정할 수 있기 때문에 위처럼 굳이 제약명을 지정하지 않고도 삭제가 가능하다.

 

 

기본키(primary key)란?

데이터베이스에는 열쇠를 뜻하는 '키(key)'라는 단어가 자주 나온다.

'검색키'와 같이 'ㅇㅇ키'의 형태로 쓰이는 경우가 많다.

기본키는 테이블의 행 한 개를 특정할 수 있는 검색키이다. 

기본키 제약이 설정된 테이블에서는 기본키로 검색했을 때 복수의 행이 일치하는 데이터를 작성할 수 없다.

기본키로 설정된 열이 중복하는 데이터 값을 가지면 제약에 위반되기 때문이다.

열을 기본키로 지정해 유일한 값을 가지도록 하는 구조가 바로 기본키 제약이다.

행이 유일성을 필요로 한다는 다른 의미에서 '유일성 제약'이라 불리는 경우도 있다.

기본키 제약에는 이를 구성할 열 지정이 필요한데, 이때 지정된 열은 NOT NULL 제약이 설정되어 있어야 한다.

즉, 기본키로는 NULL값이 허용되지 않는다.

또한 기본키를 구성하는 열은 복수라도 상관없다. 복수의 열을 기본키로 지정했을 경우, 키를 구성하는 모든 열을 사용해서 중복하는 값이 있는지 없는지를 검사한다.

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

[MySQL] 인덱스 작성과 삭제  (0) 2022.12.13
[MySQL] 인덱스 구조  (0) 2022.11.24
[MySQL] 테이블 작성, 삭제, 변경  (0) 2022.11.22
[MySQL] 데이터베이스 객체  (0) 2022.11.22
[MySQL] 상관 서브쿼리  (0) 2022.11.20