Day 05 - 26.09.29

서코딩·4일 전

SQL

목록 보기
5/7

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

profile
서코딩 127 !

2개의 댓글

comment-user-thumbnail
3일 전

오늘도 고생했어요..ㅜㅜ

1개의 답글