0. 복습
SQL문 종류
1) DDL
2) DML
3) DCL
4) TCL
DML : 데이터 조작어
: 테이블에서 데이터를 추가, 수정, 삭제, 조희
1) SELECT : 조회
2) INSERT : 추가
3) UPDATE : 수정
4) DELETE : 삭제
DDL : 데이터 정의어
: 테이블 생성, 수정, 삭제를 위한 언어
1) 테이블 생성
CREATE TABLE 테이블명(
컬럼명 자료형(용량)[제약조건],
...
);
2) 테이블 수정
ALTER TABLE 테이블명
3) 테이블 삭제
DROP TABLE 테이블명
4) 테이블 내용 전체 삭제
TRUNCATE TABLE 테이블명;
1. 제약조건(CONSTRAINT)
1) PRIMARY KEY (기본키, PK)
- 고유값이며 행의 구분점으로 사용된다
- 중복을 허용하지 않고, NULL값을 허용하지 않는다
2) FOREIGN KEY(외래키, FK)
- 다른 테이블의 PK를 사용
- 중복이 가능하다, NULL을 허용
- 보통 테이블끼리 관계를 맺을 때 사용
3) NOT NULL
: NULL을 허용하지 않는다
4) CHECK(컬럼명 = 값, 컬럼명 = 값)
- 특정 컬럼에 특정 값만 허용하고 싶을 때 사용
5) DEFAULT
: 해당 컬럼에 값을 넣지 않으면 기본값으로 설정한 값이 들어간다
6) 복합키(조합키)
- 두 개 이상의 컬럼을 KEY(PK)로 지정하는 것
- 테이블에 한개의 PK만 존재할 수 있다
- 복합키를 사용하면 두 개 이상의 컬럼을 하나의 PK로 사용할 수 있다
2. 무결성
- 데이터에 결함이 없다
- 데이터의 정확성, 일관성, 유효성이 유지되는 것
- "데이터에 결함이 없는 완벽한 상태"를 유지하기 위한 규칙
1) 무결성을 판단하는 3가지
(1) 정확성(Accuracy)
: "데이터가 실제 세계의 사실을 그대로 반영하는가"
- 데이터베이스에 저장된 값이 실제 값과 일치하는지를 의미
- 데이터가 아무리 규칙에 맞아도 사실과 다르면 '정확성'이 떨어진다고 한다
ex) PLYER테이블
실제 선수의 키가 185인데 오타로 인해 158로 저장된다면?
=> 이 데이터는 숫자 형식(도메인)은 지켰을지 모르지만, 정확성은 깨진 상태
(2) 일관성(Consistency)
: "서로 다른 곳에 저장된 동일한 데이터가 서로 모순되지 않는가?"
- 어느 시점에서 보든, 어느 테이블에서 보든 모순 없이 일치해야 함을 의미
- 특히 데이터가 여러 곳에 중복되어 있을 때 문제가 자주 발생한다
ex) TEAM테이블에서 K01팀의 이름이 '울산 현대' 인데,
SCHEDULE 테이블의 비고란에는 K01 이 '울산 시티즌' 이라고 적혀 있다면?
=> 사용자는 어떤 데이터가 맞는지 혼란에 빠질 수 있다
=> 일관성이 결여된 상태
(3) 유효성(Validty)
: "데이터가 미리 정해진 규칙과 범위 내에서 올바른 형식으로 존재하는가?"
- 유효성은 비즈니스 규칙이나 시스템이 정의한 제약조건을 통과했는지를 의미
ex) EMPLOYEES 테이블
급여 컬럼은 '0보다 커야한다'는 규칙이 있는데, 누군가 급여를 -5000으로 입력하려 한다면?
입사일 칸에 '미정' 이라는 문자열을 입력하려 한다면?
=> 시스템이 허용하지 않는 유효하지 않는 데이터
2) 무결성의 3가지 종류
(1) 개체 무결성
: "중복은 없다"
- 기본키(PK)
- 모든 테이블은 기본키(PK)를 가져야 하며, PK는 NULL일 수 없고 중복될 수 없다
ex) PLAYER 테이블
- PLAYER_ID는 모든 선수를 식별할 수 있는 유일한 값이어야 한다
- 똑같은 PLAYER_ID가 두 명에게 부여되거나, ID없는 선수가 등록되는 것을 막아야 한다
(2) 참조 무결성
: "근거 없는 데이터는 없다"
- 외래키(FK)
- 외래키 값은 참조하는 테이블의 기본키 값과 일치하거나 NULL이어야 한다
ex) PLAYER 테이블의 TEAM_ID는 반드시 TEAM 테이블에 실제 존재하는 TEAM_ID 여야 한다
존재하지도 않는 'K99'라는 팀에 선수를 소속시키려고 하면 안된다
(3) 도메인 무결성
: "범위나 형식을 벗어나지 않는다"
- 자료형, CHECK, NOT NULL, ...
- 컬럼에 입력되는 값은 정의된 데이터 형식과 범위 내에 있어야 한다
ex) HEIGHT(키)컬럼은 문자열('백팔십')이 아닌 숫자만 들어와야 한다
3. 시퀀스(SEQUENCE)
: 순서대로 증가하는 고유한 숫자를 자동으로 만들어주는 DB객체
- 주로, 기본키(PK)에 넣을 번호를 자동으로 생성할 때 사용
ex) TBL_PRODUCT에서 값을 넣을 때 상품번호(1, 2, 3, ...)를 우리가 직접 하나씩 적었다. 시퀀스를 쓰면 이 번호를 알아서 DB가 매겨준다
- 왜 필요한가?(직접 번호를 매길 때의 문제)
데이터를 넣을 때 "지금 마지막 번호가 몇번이지?" 매번 확인해야 한다
여러 사람이 동시에 데이터를 넣으면 같은 번호를 쓰는 실수가 생길 수 있다
=> 시퀀스를 사용하면 이런 고민 없이 항상 겹치지 않는 다음 번호를 받을 수 있다
1) 시퀀스 생성 : CREATE SEQUENCE
: 시퀀스를 만들 때 여러 옵션을 지정할 수 있다.
옵션을 생략하면 기본값이 적용된다
CREATE SEQUENCE 시퀀스 이름
START WITH 시작값 -- 시작 번호(기본값 1)
INCREMENT BY 증가값 -- 얼마씩 증가할지(기본값 1)
MAXVALUE 최대값 -- 올라갈 수 있는 최대번호
MINVALUE 최소값 -- 내려갈 수 있는 최소번호
CYCLE|NOCYCLE -- 최대값 도달 시 다시 처음부터 돌지 여부
(기본 NOCYCLE)
2) 시퀀스 사용 : NEXTVAL / CURRVAL
: 시퀀스는 만들었다고 저절로 번호가 들어가지 않는다
직접 다음 번호를 뽑아 써야 한다
- 시퀀스명.NEXTVAL : 다음 번호를 발급
- 시퀀스명.CURRVAL : 현재 번호를 다시 확인
3) 시퀀스 수정 : ALTER SEQUENCE
: 이미 만든 시퀀스의 옵션을 수정할 때 사용
4) 시퀀스 삭제 : DROP SEAUENCE
오늘도 고생했어요..ㅜㅜ