[4기] 백엔드 개발자 부트캠프 "오르미" ~ing/[4기] 백엔드 개발자 부트캠프 오르미 수업 복습

[4기] 57일차 SQL( DDL,DCL )

sohee99 2024. 2. 27. 23:32

오늘의 학습 

 

DDL DCL!!!

 

 

ALTER

 

- ALTER TABLE 은 기존 테이블의 구조를 변경하기위해 사용

 

 

새로운 열 추가 

ALTER TABLE students ADD grade VARCHAR(20)

 

 

기존 열 이름 변경

- grade의 이름을 great로 이름 수정

ALTER TABLE students RENAME COLUMN grade TO great

 

 

기존 열 데이터 타입 변경

 

- students의 address열의 데이터타입을 수정

 

ALTER TABLE students ALTER COLUMN address TYPE VARCHAR(100)

 

열 삭제

 

ALTER TABLE students DROP COLUMN grade

 

grade 열을 삭제

 

 

TRUNCATE

- 테이블의 모든 데이터를 삭제할 때 사용한다.

 

 

< 테이블의 모든 데이터 삭제 >

 

TRUNCATE TABLE students

 

 

TRUNCATE vs DELETE

 

전체 데이터를 삭제할 때 DELETE보다 TRUNCATE가 속도가 더 빠르다. 

TRUNCATE의 경우 테이블을 스캔하는 과정을 거치지 않기 때문 

 

하지만 TRUNCATE의 경우, 로그를 남기지 않기 때문에 

테이터 복구가 가능한 DELETE를 많이 사용한다!

 
 

DROP vs TRUNCATE vs DELETE

 
DROP
TRUNCATE
DELETE
종류
DDL
DDL(일부 DML)
DML
COMMIT
AUTO COMMIT
AUTO COMMIT
사용자 COMMIT
속도
불가
불가
가능
명령어 수행시
테이블 정의 삭제
테이블을 최초 생성한 초기 상태로 만들어줌
데이터만 삭제
로그
남기지 않음
남기지 않음
남김
속도
빠름
빠름
느림

 

 

DB Index

- 테이블의 특정 열에 대한 검색 및 조회 성능을 향상 시키기 위해 사용되는 자료구조 

 

* 찾아야하는 칼럼값이 있을 때 인덱스를 사용하여 전체를 탐색하지 않고도 필요한 행에 빠르게 접근가능!!

 

 

SELECT *
FROM students
WHERE name = '홍길동';

 

홍길동이라는 이름을 찾을 때 테이블 row 수가 많을 때, full scan하면 성능이 매우 떨어지기 때문에 

인덱스를 추가한다!

 

 

Index 생성/삭제 문법 

< 생성 및 추가 >

-- 단일 컬럼 인덱스
CREATE INDEX [인덱스명] ON [테이블명] ([컬럼명]); 

-- 다중 컬럼 인덱스
CREATE INDEX [인덱스명] ON [테이블명] ([컬럼명, ...]);

 

<삭제>

 

ALTER TABLE [테이블명] DROP INDEX [인덱스이름];

 

 

Index 자료구조

- Hash Table, B-Tree, B+Tree 등의 자료구조 존재

 

 

Hash Table

- Key - Value 형태로 이루어진 데이터를 저장하는데 특화된 자료 구조 

 

B-Tree

 

- 자식노드가 2개 이상인 트리를 의미한다.

- B-Tree의 Key-Value값들은 항상 Key를 기준으로 오름차순 정렬

 

 

 

대상 컬럼 선정 방법

인덱스 대상 컬럼의 선정 기준

인덱스 설정 기준
정도
Cardinality
높을수록 적합
활용도
높을수록 적합
중복도
낮을수록 적합

 

 

DCL이란?

-Data Control Language 약자

 

 

DCL 사용용도

 

1. 데이터베이스를 다룰수 있는 권한 부여 박탈 

2. 트랜잭션 관리 

GRANT
권한 부여
REVOKE
권한 박탈
COMMIT
트랜잭션 적용
ROLLBACK
트랜잭션 취소, 복구

 

 

REVOKE

REVOKE [권한] ON [테이블명] FROM [권한을 박탈할 사용자]

 

 

GRANT

GRANT [권한] ON [테이블명] TO [권한을 받을 사용자]

 

 

GRANT, REVOKE에서 부여하고 박탈할 수 있는 권한의 종류

SELECT
조회 권한
UPDATE
수정 권한
INSERT
삽입 권한
DELETE
삭제 권한
ALL
모든 권한

 

 

트랜잭션 시작

BEGIN;

INSERT INTO accounts(name, balance) VALUES('A', 10000);

 

 

COMMIT

 

- 트랜잭션을 최종적으로 모든 세션에 반영

 

BEGIN;

INSERT INTO accounts(name, balance) VALUES('A', 10000);

COMMIT;

 

 

ROLLBACK

- 현재 트랜잭션을 반영하지 않고 되돌리는 명령어

 

BEGIN;

INSERT INTO accounts(name, balance) VALUES('B', 10000);

ROLLBACK;

 

 

정규화도 제3정규화까지 살짝 배웠지만! 

 

내일 이어서 작성할려구용 ㅎㅎㅎㅎ

 

오늘은 DCL까지 배웠구욥!!!

 

SQL 자격증 덕분에 나름 무난하네요 ㅎㅎㅎㅎㅎ 

 

계속 공부중인데 시험이 어떨지,,,, 책이 문제가 너무 어려워서..ㅠㅠ

 

일단 최선을 다해 준비하는걸로!!!!

 

오늘도 파이팅했구욥!!!

 

내일도 파이팅!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!😊