상세 컨텐츠

본문 제목

42일차. DB 2 - CREATE, CHARACTER 형식

수업 일지/Oracle DBMS

by NayC 2021. 4. 19. 09:32

본문

728x90

DataBase - 이게 '중복'의 의미를 가진다고. 

DBMS

- 가장 큰 장점은 '무결성'

- 관리하는 '녀석'임

- 왜 DB를 직접! 관리하지 않고 DBMS를 활용할까. 

1. 누가 작업중일 때는 작업중이라고 말해주고, 손 못대게 해주기 (동시성 문제 해결) -> 관리자 등장

2. 어플리케이션이 '성능'에 대한 걸 요구하기 시작 (언제까지 기다려야해??!)

3. 허락받지 않은 사람이 데이터에 접근하면 안되니, '보안'도 해결해야함

SQL

// 

 

1. 이 데이터 학생거야! 

명령어 3가지 

DDL : create, alter, drop

 

2. 조작 명령어 (이제 학생거라는거 알았으니 조작을 해보자~) 

DML : select, insert, update, delete

 

3. 컨트롤 랭귀지

DCL : grant ,revoke

 

// 이게 명령어의 전부. 9개만 외우면 된다! 

문제는 9개가 옵션ㅜ을 많이 가지고 있다~ 


1. 데이터가 어떤 데이터인지 밝혀주는 작업 하기

 

먼저, 오라클 DBMS를 설치해보자.

- 옵티마이저, 튜닝해주는 사람,... 

(tr가) 설치할까 고민 중.

원래 한 사람만 가지고 있으면 된다고 한당. 

- DB는 같이 쓰는거니까! 

  근데 이걸 지금 수업에서 다들 각자 마련하면 문제가 된다는 뜻~

설치 안하기로! 탕탕 (오라클 다운 받으면 메모리도 엄~~~청 잡아먹는다고 한다. 거의 다!) 

- 회사 가서도 오라클이 설치가 되어있다고 (내가 설치할 일은 없다~~) 

//

SQL Developer 준비하기를 하자

 

접속하는 도구 

1) 콘솔형(커맨드창)

2) 윈도우형 

 

www.oracle.com/database/technologies/appdev/sqldeveloper-landing.html 이곳에서 다운 받았당

 

// 맨 왼쪽 새로 만들기 (초록색 플러스)

 

ㅡㅡㅡㅡㅡ

SQL (Structured Query Language)

 

DDL 명령어를 써보자. 

 

Member 데이터를 정의해보자.

 

- 오라클은 어차피 다~ 대문자로 인식을 한다고 한다. 

- 자료형은 뒤에 써 줌

오라클에서는 class가 아니라 TABLE. 그리고 명령어는 CREATE

 

cf)

 

[Oracle] varchar / varchar2의 차이, number(x,y)의 의미. (tistory.com)

 

 

 

이러면 오류남. 옆에 사용했던 이름이 사용되어서

(그래서 몇 번째에서 몇 번째... 이렇게 32를 붙여줬었...)

 

결과 보고 싶을 땐 저기 우클릭 > 새로고침 ... 하니까 안되던뎅 (아래 방법이 된당)

전체일 땐 꼭 선택 안해도 되고, 선택 사항 보고 싶으면 선택해서 저 버튼 누르거나 아니면 아래 단축키 (컨트롤 + 엔터

-> 아아 괄호 () 다

ㅡㅡㅡㅡㅡ 

자기만 쓰는 자료형

ANSI에서 제공하는 자료형이 표준형

사용자가 스스로 정의하는 자료형

 

기본을 먼저 알아보자

- 다 문자열

 

고정 크기임 

- 그럼 남는 공간 활용 불가

-> 공간을 찜해놓음

// 너무 졸려서 ... 이거 이해해야행ㅠ 

 

 

CHAR 고정 길이
VARCHAR2 가변 길이
CHAR(2) 2바이트를 준비하겠다는 것
- 여기 안에 한국어는 한 글자도 못들어간당ㅜㅜ!

CHAR(2 CHAR) 두 글자 쓰겠다는 것

아스키 기반 
UTF8 사용. (8비트 형태의 유니코드)
NCHAR(2) 유니코드 기반
UTF16 사용 

NCHAR(2) 는 2개X2바이트(한글)= 4바이트 (이게 공간도 절약되고 좋다) // 앞에 N이 붙으면 UTF16 사용하겠다는거고 / 여기서는 메모리 효율나서>.< 한글도 2바이트 처리되니까~ 한글 2개 넣으면 2X2= 4바이트가 되지! 

cf) N을 안붙이면 3바이트 CHAR(2 CHAR) -> 6바이트

 

 

VARCHAR2(100) -> 100글자가 아니라, 100바이트!!! 한글은 한 33개 정도 들어갈 것 // 

 

Q. N을 붙이고 안 붙이고 차이가 뭘까? 

-> N 안 붙이면 30바이트, 붙이면 20바이트 

-> 문제 다시ㅎㅎㅎ) 한글 10글자를 

VARCHAR(10 CHAR) -> 30 바이트

NVARCHAR(10) -> 20바이트 

-> N을 붙이는게 메모리 덜 차지하고 좋다. 그래서 N을 붙이기로 한다~~~ 탕탕! 

 

 

Q. GENDER 에 남성, 여성 적어주려 한다. 

-> CHAR(2) 

    고정 길이는 CHAR, 아닌 가변 길이는 VARCHAR 인가보당

 

 

Q. BIRTHDAY를 넣어주려함 

생년월일은 누구나 다 길이가! 같음

-> 고정 길이니까 CHAR로 하면 된다 그냥~~ 

-> CHAR(6) (ex: 901010)

 

Q. Phone 을 넣어주려함

-> 내 답은 CHAR(13) (ex:  010-0000-0000)

 

다른 분은 VARCHAR(15) (혹시 몰라서 2개 더 넣으셨다고. 만약에 - 생략해서 넣으면 11개니 굳이 15개까지는 노노~)

(숫자도 달라질 수 있을 것 같아서 VAR 앞에 붙이셨다고 함)

 

저 숫자는 우리가 따져봐야 한다. 

 

CHAR(2 CHAR)라고 써줘야 CHAR를 위한 바이트 2개 (즉 6바이트)를 준비하겠구나 인식.... 

 

CHAR(2)라고 쓰면 ->  2바이트를 준비하겠다는 것. 아스키코드는 문제없음.

                             근데 한글은 1바이트를 넘어섬. 그래서 확장한 멀티바이트 언어 써야 

                             아래처럼! 캐릭터 2개 들어가게 만들어 달라는 것 

CHAR(2 CHAR) 라고 쓰면 -> 여기서 2는 문자로 2니까 2 CHAR라고 붙이는 것 (두 글자 쓰겠다는 것)

                                      근데 이게 좀 복잡하니까 간단히 표현할 수 있다는 것. NCHAR(2) 

 

변수 선언은 공간을 준비하는 것과도 같음 

CHAR(2)는 2바이트 준비. 여기 안에 한국어는 한 글자도 못들어감

-> 내가 2글자 넣겠다고 했으니 '크기에 상관없이 문자 2개 넣겠다' CHAR(2 CHAR) - 아스키 기반! (1바이트)

    NCHAR(2) 애도 똑같이 2개 문자를 받는 것 - 유니코드 기반! (그래서 애는 문자 2개라고 알아서 맞춰주는)

    차이점 있다. 위에는 UTF8 사용. (8비트 형태의 유니코드)

    아래는 UTF16 사용 (이게 8 쓰는 것보다, 위에게 3바이트 아래는 2바이트로 한정) 

- 8비트 쓰게되면 [.............]

  16비트 쓰게 되면 [......................................] 

Korean은 우선순위 다 밀리고 ㅠ 3바이트짜리 사용 (UTF-8. 비효율 ㅠㅠ 비효율 비효율)

그러다가! UTG-16 가면서는 16이 더 많은걸 담으니 우선순위가 위로 올라가서는 2바이트라는 것 

 

유티코드 쓰면 앞에 N 붙여줌 (이건 2바이트)

유니코드 아니면 AL16UTF16 (이건 3바이트) 

 

위에는 각 3바이트씩 6바이트

NCHAR(2) 는 2X2 = 4바이트 (이게 공간도 절약되고 좋다)  

cf) N을 안붙이면 3바이트

 

비효율적이다 (8비트는) 

 

Q. PHONE에다가 N을 붙이는게 바람직할까? 

-> 숫자, 대시는 아스키 범주 내에서 끝나기에 그런건 그냥 바로 끝내면 됨 (N 없이)

 

Q. NAME은? 

-> 내 생각은 앞에 N이 붙어야 할 것 같아! (그렇다.) 

    VAR가 붙어서 가변길이기에 (여기의 숫자는 MAX) 개념. (25가 MAX길이로 저장하겠다는 것)

 

// 자료형을 정의할 수 있어야 테이블을 만들 수 있다. 

 

VARCHAR2(100) -> 100글자가 아니라, 100바이트!!! 한글은 한 33개 정도 들어갈 것 

 

Q. N을 붙이고 안 붙이고 차이가 뭘까? 

-> N 안 붙이면 30바이트, 붙이면 20바이트 

-> 붙이는게 메모리 덜 차지하고 좋다. 

 

 

 

 

 

파란 글자는 '예약된 키워드' 

- 내가 쓰고 싶으면 "" 

- 그리고 그 옆에는 다양한 나라의 언어들이 들어올 수 있으니 NVARCHAR2(?) 

  몇 자나 들어갈까? 

  한계가 있다. 무한대로 글 쓰게 할 수는 없음. 

  4000바이트 넘지를 못함

 

  4000자 충분하지 않다. 

  그래서 환경 설정을 STRING_SIZE = EXTEDED 해서 32767 까지 확장할 수 있으나 이것도 부족하다고. 

 

  그래서 문자열 대신 할 수 있는 형식 등장

 

  맨 아래거는 N이 붙였지. (한글 쓰는 경우 데이터 공간을 더 줄일 수 있겠군~~) 

  

  LONG은 초창기거 (맥시멈이 2기가)

  

  우리는 아래 2개 중에 하나를 쓰자~  (Large of Byte)

 

  // 내일은 숫자형, 날짜형

 

728x90
반응형

관련글 더보기