SQL 첫걸음 - 6장 제약(3/6)
1. 테이블 작성시 제약 정의
CREATE TABLE로 테이블을 작성할 때 제약을 같이 정의. 물론 ALTER TABLE로 제약을 지정하거나 변경할 수 있음. 이 때 NOT NULL 제약 등 하나의 열에 대해 설정하는 제약은 열을 정의할 때 지정.
특정 열에 NOT NULL 제약과 UNIQUE 제약을 설정.
CREATE TABLE sample631 ( a INTEGER NOT NULL
, b INTEGER NOT NULL UNIQUE
, C VARCHAR(30));
- 이처럼 열에 대해 정의하는 제약을 ‘열 제약’, 복수의 열에 제약을 설정하는 경우를 ‘테이블 제약’이라 부름.
테이블에 ‘테이블 제약’ 정의
CREATE TABLE sample632 ( no INTEGER NOT NULL
, sub_no INTEGER NOT NULL
, name VARCHAR(30)
, PRIMARY KEY (no, sub_no));
제약에는 이름을 붙일 수 있음. 제약에 이름을 붙이면 나중에 관리하기 쉬워지므로 가능한 한 이름을 붙임. 제약 이름은 CONSTRAINT 키워드를 사용해서 지정.
테이블에 ‘테이블 제약’ 정의
테이블 제약에 이름 붙이기
CREATE TABLE sample632 ( no INTEGER NOT NULL
, sub_no INTEGER NOT NULL
, name VARCHAR(30)
, CONSTRAINT pkey_sample PRIMARY KEY (no, sub_no) ===> 기본키 제약 설정
);
2. 제약 추가
열 제약 추가
기존 테이블에 열 제약을 추가할 경우 ALTER TABLE 명령 사용하여 열 정의를 변경할 수 있음. 기존 테이블을 변경할 경우에는 제약을 위반하는 데이터가 있는지 먼저 검사.
c열에 NOT NULL 제약 걸기
ALTER TABLE sample631
MODIFY c VARCHAR(30) NOT NULL;
만약 c 열에 NULL값이 존재한다면 ALTER TABLE 명령은 에러가 발생함.
테이블 제약 추가
테이블 제약은 ALTER TABLE의 ADD 하부명령으로 추가할 수 있음.
테이블 제약(기본키 제약) 추가
ALTER TABLE sample631
ADD CONSTRAINT pkey_sample631 PRIMARY KEY(a);
기본키는 테이블에 하나만 설정 가능. 이미 기본키가 설정되어 있는 테이블에 추가로 기본키를 작성할 수 없음.
3. 제약 삭제
열 제약 삭제
열 제약의 경우, 제약을 추가할 때와 동일하게 열 정의를 변경. 앞서 추가한 c열의 NOT NULL 제약을 삭제하는 ALTER TABLE의 예
c열에 NOT NULL 제약 없애기
ALTER TABLE sample631
MODIFY c VARCHAR(30);
테이블 제약 삭제
테이블 제약은 ALTER TABLE의 DROP 하부명령으로 삭제 가능. 삭제할 때는 제약명을 지정. 기본키는 테이블 당 하나만 설정할 수 있기 때문에 위처럼 굳이 제약명을 지정하지 않고도 2번 처럼삭제할 수 있음.
pkey_sample631(제약명으로) 제약 삭제
ALTER TABLE sample631
DROP CONSTRAINT pkey_sample631;
기본키 제약 삭제
ALTER TABLE sample631
DROP PRIMARY KEY; ==> MySQL은 이렇게 삭제
cf. UNIQUE 제약 조건 삭제
- MySQL
ALTER TABLE sample631
DROP INDEX 열명;
- SQL Server / Oracle / MS Access
ALTER TBLE sample631
DROP CONSTRAINT 제약명;
4. 기본키
기본키는 테이블의 행 한 개를 특정할 수 있는 검색키. 기본키로 지정할 열은 NOT NULL 제약이 설정되어 있어야 함. 기본키 제약이 설정된 테이블에서는 기본키로 검색했을 때 복수의 행이 일치하는 데이터를 작성할 수 없음. 즉 기본키로 설정된 열이 중복하는 데이터를 값을 가지면 제약에 위반됨. 이처럼 열을 기본키로 지정해 유일한 값을 가지도록 하는 구조가 바로 기본키 제약. 행이 유일성을 필요로 한다는 다른 의미에서 ‘유일성 제약’이라 불리기도 함. 복수의 열로 기본키 구성 가능. 복수의 열을 기본키로 지정했을 경우, 키를 구성하는 모든 열을 사용해서 중복하는 값이 있는지 없는지를 검사.
출처 : https://smilejh.tistory.com/