혼공S 4주차 미션 05 테이블과 뷰

sujinzzang수진짱·2024년 1월 27일
0

hongongSQL

목록 보기
4/6

오늘은 완주 50% 기념으로 혼공족장님에게 선물받은 와플을 먹으며 공부를 시작해보겠습니당!

완주까지 화팅~

05-1 테이블 만들기

테이블

  • 엑셀 시트와 비슷한 구조
  • 테이블 구조를 만드는 방식 2가지
    - GUI (마우스로 클릭)
    • 직접 SQL 문으로 만든는 것

테이블 설계

  • 회원테이블, 구매테이블 만들기
  • 회원테이블 아이디 : PK
  • 구매테이블 아이디 : FK

GUI로 테이블만들기

  • GUI 환경에서 FOREIGN KEY를 설정하는 것은 까다로워서 apply 후 쿼리문이 나왔을 때 쿼리를 수정해서 FOREIGN KEY를 지정한다. (캡처 못함)

행 추가

member 테이블에 행 추가

  • GUI 환경에서 입력한 후 apply 버튼을 통해 추가할 수 있다.
  • apply 버튼 눌렀을 때 보이는 쿼리문 (아까 이런 화면에서 FOREIGN KEY를 지정해주었다)

buy 테이블에 행 추가

  • 오류가 발생

    -> 외래키로 받는 mem_id에 APN을 입력했는데 회원테이블에 APN이 없기 때문

SQL 쿼리로 테이블 만들기

  • 쿼리문으로 다시 만들기 위해 지움ㅜ
  • 쿼리문으로 테이블 다시 만들기

05-2 제약조건으로 테이블을 견고하게

  • 제약조건: 데이터가 완전무결하게 도와준다
  • 제약조건 - 기본키, 외래키, NOT NULL 등

제약조건

  • 데이터의 무결성을 지키기 위해 제한하는 조건
  • 데이터의 무결성: 데이터에 결함이 없음

제약조건의 종류

  • PRIMARY KEY
  • FOREIGN KEY
  • UNIQUE
  • CHECK
  • DEFAULT
  • NULL값 적용

기본키 제약조건

  • 기본키: 데이터를 구분할 수 있는 식별자
  • 중복될 수 없으며 NULL 값이 입력될 수 없음
  • ex. 회원 아이디, 주민번호, 이메일
  • 기본키로 생성한 것은 자동으로 클러스터형 인덱스가 생성된다.
  • 테이블에는 기본키를 1개만 가질 수 있다.
  • 아이디, 주민번호, 이메일 컬럼이 다 있어도 컬럼 하나만 기본키가 된다.
  • mem_id 컬럼을 기본키로 지정
  • 확인
  • 컬럼 정보를 다 입력 후, 맨 뒤에 기본키를 지정할 수도 있다
  • 테이블을 일단 만들고, ALTER TABLE~을 해도 된다

외래키 제약조건

  • 기준테이블과 참조테이블
  • 기준테이블은 무조건 PRIMARY KEY 또는 UNIQUE여야 한다.
  • 만들기
  • 기준테이블의 PK와 참조테이블의 FK의 컬럼명이 같지 않아도 되나 권장하지 않는다.

기준테이블의 열이 변경되는 경우

  • 기준테이블의 값이 변경된다면? (ex. BLK가 PINK로 변경)
    - 변경되지 않는다~
  • 기준테이블의 값을 삭제한다면? (ex. BLK가 삭제)
    - 삭제되지 않는다~
    -> PK, FK로 맺어진 경우 PK의 값은 변경, 삭제되지 않으며 컬럼도 삭제되지 않는다.
  • 그래도 꼭 변경하고 싶다면?
    - 기준테이블의 값을 변경할 경우, 참조테이블의 값도 자동으로 변경될 수 있다~
    - ON UPDATE CASCADE 기준테이블의 값이 변경될 경우, 참조테이블의 값도 자동으로 변경된다
    • ON DELETE CASCADE 기준테이블의 값을 삭제할 경우, 참조테이블의 값도 자동으로 삭제된다

고유키 UNIQUE 제약조건

  • 중복되지 않는 유일한 값을 입력해야하는 조건
  • 기본키와 비슷하지만 차이점은 NULL값을 허용한다.
  • 왜 사용? 아이디를 PK로 지정한 경우, 이메일을 UNIQUE로 지정한다.

CHECK 제약조건

  • 데이터를 입력할 때 특정 값 또는 특정 조건만 입력하게 한다.

기본값 정의

  • 값을 입력하지 않았을 때 자동으로 입력될 값을 미리 지정하는 것
  • 값을 넣지 않았을 때 디폴트 값이 자동으로 들어갔다.

NULL값 허용

  • NULL null 값 허용
  • NOT NULL null값 비허용
  • 이름 컬럼은 not null 조건 건다.

05-3 가상의 테이블: 뷰

  • 데이터베이스의 개체 중의 하나
  • 실체가 있는 것이 아니다.
  • 가상의 테이블. 테이블이라고 생각해도 큰 무리는 없다
  • 테이블인 것 처럼 접근된다.
  • 뷰에는 진짜 데이터가 없고 SELECT문만 있다.

뷰 만들기

뷰 조회

  • 뷰를 조회할 때와 테이블을 조회할 때 결과 똑같다.

뷰를 사용하는 이유

보안

  • 테이블에서 중요한 정보를 제외하고 뷰를 만들 수 있다. (ex.개인정보)
  • 중요데이터에 접근하지 못하는 사람은 뷰를 통해 작업할 수 있다.

복잡한 SQL을 단순하게 만들 수 있다.

  • 복잡한 쿼리문을 뷰로 만들 수 있다.

뷰의 실제 작동

생성

  • ALIAS를 컬럼명으로 하는 뷰를 생성할 수 있다.
  • 띄어쓰기를 하고 싶을 때는 백틱을 사용해야한다.

뷰 수정

  • ALTER VIEW를 사용한다.
  • 컬럼명에 한글을 쓰는 것은 권장하지 않으나 꼭 써야한다면 테이블이 아니라 뷰에 사용하는 것이 좋겠다.

삭제

  • DROP VIEW를 사용한다.

조회

  • VIEW에서는 PK가 확인되지 않는다.
  • SHOW CREATE VIEW 뷰 이름: 뷰를 만들었던 구문을 확인하고 싶을 때

뷰를 통한 데이터 수정

  • 데이터 수정

  • 데이터 신규 입력

  • 뷰에 데이터 신규 입력 시 입력이 될 수도 있고, 오류가 날 수도 있다.

  • 현재 오류나는 이유: 실제 테이블에서 NOT NULL인 조건을 입력하지 않았기 때문

  • 일반적으로 뷰에 데이터를 입력하는 것은 바람직하지 않다.

  • 조건에 맞지 않는 데이터 신규 입력

  • 167이상인 것만 보여주는 뷰 생성 - 167이하인 값을 입력 - 다시 167이상인 것만 보여주는 뷰 조회할 때 167 이하인 값이 보이지 않는다.

  • 이럴 때는 뷰를 생성할 때 CHECK 조건을 넣어서 167이하인 값을 입력하지 않는 것이 좋겠다.

뷰와 테이블

  • 뷰를 만들고 테이블을 삭제할 경우 테이블은 삭제 가능. 뷰 조회는 안된다. 참조하는 테이블이 없기 때문

기본미션

p. 226의 market_db의 회원 테이블(member) 생성하고, p. 229 데이터 입력한 후 인증하기

선택미션

p. 271 확인 문제 4번 풀고 인증하기

기존에 뷰가 있으면 덮어쓰고, 없으면 새로 생성해라

CREATE OR REPLACE VIEW

0개의 댓글