오늘의 학습
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 자격증 덕분에 나름 무난하네요 ㅎㅎㅎㅎㅎ
계속 공부중인데 시험이 어떨지,,,, 책이 문제가 너무 어려워서..ㅠㅠ
일단 최선을 다해 준비하는걸로!!!!
오늘도 파이팅했구욥!!!
내일도 파이팅!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!😊

'[4기] 백엔드 개발자 부트캠프 "오르미" ~ing > [4기] 백엔드 개발자 부트캠프 오르미 수업 복습' 카테고리의 다른 글
| [4기] 63일차 SpringBoot(디렉터리 구성 및 발전시키기) (0) | 2024.03.04 |
|---|---|
| [4기] 58일차 SQL( 데이터모델링과 ERD ), Spring이란? (2) | 2024.02.28 |
| [4기] 56일차 SQL( 서브쿼리, DDL - CREATE ) (0) | 2024.02.26 |
| [4기] 52일차 SQL(기본명령어 DML, 내장함수, 그룹화, JOIN) (2) | 2024.02.22 |
| [4기] 51일차 SQL( 데이터베이스 및 SQL 실습환경 셋팅 ) (0) | 2024.02.21 |