- 제약조건은 데이터의 무결성을 지키기 위해 제한하는 조건
- 제약은 테이블에 설정하는 것.
AUTO_INCREMENT | 새 행 생성(행 데이터가 추가될 때 마다) 자동으로 1씩 증가 + PRIMARY KEY |
PRIMARY KEY | 오직 하나의 기본키만 가질 수있음(중복 입력 불가), NULL(빈 값) 입력 불가(무조건 값이 있어야함) |
FOREIGN KEY | 필수 X, 참조 |
UNIQUE | 중복 입력 불가 |
NOT NULL | NULL(빈 값) 입력 불가(무조건 값이 있어야함), NULL값이 저장되지 않도록 제한 |
UNSIGNED | (숫자일시) 양수만 가능 |
DEFAULT 정의 | 값 입력이 없을 시 기본값 |
1. 테이블 작성시 제약 정의
CREATE TABLE sample631(
a INTEGER NOT NULL,
b INTEGER NOT NULL UNIQUE,
c VARCHAR(30)
);
테이블 열에 제약 정의하기
- a열 : NOT NULL제약
- b열 : NOT NULL제약, UNIQUE제약
- 열 제약 : 열에 대해 정의하는 제약
CREATE TABLE sample632 (
no INTEGER NOT NULL,
sub_no INTEGER NOT NULL,
name VARCHAR(30),
PRIMARY KEY(no, sub_no)
);
테이블에 '테이블 제약' 정의하기
- 테이블 제약 : 한 개의 제약으로 복수의 열에 제약을 설명하는 경우
CREATE TABLE sample632 (
no INTEGER NOT NULL,
sub_no INTEGER NOT NULL,
name VARCHAR(30),
CONSTRAINT pkey_sample PRIMARY KEY (no, sub_no)
);
'테이블 제약'에 이름 붙이기
- 제약에는 이름을 붙일 수 있음. 제약에 이름을 붙이면 나중에 관리하기 쉬워지므로 가능한 이름을 붙이는게 남
- 제약 이름은 CONSTRAINT 키워드를 사용해서 지정함
2. 제약 추가
- 기존 테이블도 나중에 제약을 추가할 수 있음
열 제약 추가
ALTER TABLE sample631 MODIFY c VARCHAR(30) NOT NULL;
c열에 NOT NULL 제약 걸기
- 열 제약을 추가할 경우 ALTER TABLE로 열 정의 변경 가능
- 기존 테이블을 변경할 경우에는 제약을 위반하는 데이터가 없는지 먼저 검사
- 만약 c열에 NULL이 존재한다면 위 ALTER TABLE 명령은 에러 발생
테이블 제약 추가
ALTER TABLE sample631 ADD CONSTRAINt pkey_sample631 PRIMARY KEY(a);
기본키 제약 추가하기
- 테이블 제약은 ALTER TABLE의 ADD 하부명령으로 추가가능
- 기본키는 테이블에 하나만 설정할 수 있음
- 이미 기본키가 설정되어 있는 테이블에 추가로 기본키를 작성할 수는 없음
- 기존 테이블을 변경할 경우에는 제약을 위반하는 데이터가 없는지 먼저 검사, 추가할 제약을 위반하는 데이터가 있으면 에러 발생
3. 제약 삭제
열 제약 삭제
ALTER TABLE sample631 MODIFY c VARCHAR(30);
c열의 NOT NULL제약 없애기
테이블 제약 삭제
ALTER TABLE sample631 DROP CONSTRAINT pkey_sample631;
pkey_sample631 제약 삭제
ALTER TABLE sample631 DROP PRIMARY KEY;
기본키 제약 삭제하기
- 기본키는 테이블 당 하나만 설정할 수 있기에 위처럼 제약명을 지정하지 않고도 삭제 가능
4. 기본키
- NOT NULL : 열 제약
- 기본키 제약 : 테이블 제약
CREATE TABLE sample634(
p INTEGER NOT NULL,
a VARCHAR(30),
CONSTRAINT pkey_sample634 PRIMARY KEY(p)
);
sample634 테이블 작성
- p가 sample634 테이블의 기본키, 기본키로 지정할 열은 NOT NULL 제약이 설정되어 있어야 함
- 대량의 데이터에서 원하는 데이터를 찾아낼 때 키가 되는 요소를 지정해 검색
- 기본키는 테이블의 행 한 개를 특정할 수 있는 검색키, 기본키 제약이 설정된 테이블에서는 기본키로 검색했을 때 복수의 행이 일치하는 데이터 작성 불가
- 기본키로 설정된 열이 중복하는 데이터 값을 가지면 제약에 위반됨
INSERT INTO sample634 VALUES (1, '첫째줄');
INSERT INTO sample634 VALUES (2, '둘째줄');
INSERT INTO sample634 VALUES (3, '셋째줄');
sample634에 행 추가
- p열의 값이 각각 1,2,3으로 중복되지 않음
INSERT INTO sample634 VALUES (2, '넷째줄');
sample634에 중복하는 행 추가하기
- '기본키 제약에 위반된다'는 에러발생 : 이미 존재하는 값인 2로 다시 한 번 행을 추가해서
UPDATE sample634 SET p=2 WHERE p=3;
sample634에 중복된 값으로 갱신하기
- UPDATE 명령 역시 제약에 위반되므로 실행되지 않음 : p가 3인 행을 2로 갱신하는데 성공하면 p=2인 열이 두개가 존재하기 때문
- 기본키 제약(유일성 제약) : 열을 기본키로 지정해 유일한 값을 가지도록하는 구조
* 기본키 제약이 설정된 열에는 중복된 값을 저장힐 수 없음!
복수의 열로 기본키 구성하기
- 기본키로는 NULL값이 허용되지 않음
- 기본키를 구성하는 열은 복수라도 상관없음
- 복수의 열을 기본키로 지정했을 경우, 키를 구성하는 모든 열을 사용해서 중복하는 값이 있는지 없는지를 검사
SELECT a, b FROM sample635;
a열과 b열로 이루어진 기본키
- a열만 봤을 때는 중복하는 값이 있지만 b열이 다르면 키 전체로서 중복하지 않는다고 간주됨 ➡️ 기본키 제약 위반 X
- 이 상태에서 키가 완전히 동일한 데이터 값으로 INSERT 명령을 실해하면 기본키 제약 위반
'데이터분석 > SQL' 카테고리의 다른 글
SQL 첫걸음 - 뷰 작성과 삭제 (0) | 2025.03.07 |
---|---|
SQL 첫걸음 - 인덱스 구조 & 인덱스 작성과 삭제 (0) | 2025.03.07 |
SQL 첫걸음 - 데이터베이스 객체 & 테이블 작성, 삭제, 변경 (0) | 2025.03.06 |
SQL 첫걸음 - 상관 서브쿼리 (0) | 2025.03.04 |
SQL 첫걸음 - 서브쿼리 (0) | 2025.03.04 |