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)
이러면 오류남. 옆에 사용했던 이름이 사용되어서
(그래서 몇 번째에서 몇 번째... 이렇게 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)
// 내일은 숫자형, 날짜형
49일차. DB 6 - || , IS NULL, IS NOT NULL, BETWEEN, % (0) | 2021.04.28 |
---|---|
48일차. DB 5 - +, -, x, / (0) | 2021.04.27 |
44일차. DB 4 - INSERT, SELECT, UPDATE, DELETE (0) | 2021.04.21 |
43일차. DB 3 - Numeric 형식, ALTER, 데이터 형식, COMMIT, ROLLBACK (0) | 2021.04.20 |
41일차. DB 1 - DBMS 시작 (0) | 2021.04.16 |