목표: MySQL 고급기능 정리
MySQL 고급기능
트랜잭션
- 트랜잭션: SQL들을 묶어서 하나의 작업처럼 처리하는 방법
- 조회는 트랜잭션 필요없음
BEGIN/START TRANSACTION; -- 레코드를 수정/추가/삭제 -- ROLLBACK: BEGIN 전의 상태로 돌아가라 END/COMMIT;
- 트랜잭션 커밋 모드
- autocommit = True: 수정/삭제/추가시에 바로 커밋됨->트랜잭션으로 묶어 처리
- autocommit = False: db에 반영하려면 COMMIT 직접 호출, ROLLBACK 가능
SHOW VARIABLES LIKE 'AUTOCOMMIT'; -- 커밋모드 확인 SET autocommit=1; -- autocommit = True SET autocommit=0; -- autocommit = False
- DELETE FROM vs. TRUNCATE: TRUNCATE는 Transaction을 지원하지 않음
View
자주 사용하는 SQL 쿼리 (SELECT)에 이름을 주고 그 사용을 쉽게 하는 것
CREATE OR REPLACE VIEW viewName AS SELECT s.id, s.user_id, s.created, s.channel_id, c.channel FROM session s JOIN channel c ON c.id = s.channel_id; SELECT * FROM viewName;
Stored Procedure
MySQL 서버단에 저장되는 SQL 쿼리들
DROP PROCEDURE IF EXISTS procedure_name; DELIMITER // CREATE PROCEDURE procedure_name(IN channelName varchar(64)) BEGIN SELECT * FROM session_details WHERE channel = channelName; END // DELIMITER ; CALL session_details('Facebook');
Stored Function: 값(Scalar)을 하나 리턴, SQL 안에서 사용가능
DELIMITER $$ CREATE FUNCTION Food_Type(food varchar(32)) RETURNS VARCHAR(20) DETERMINISTIC -- 동일한 결과를 반환 BEGIN DECLARE food_type VARCHAR(20); IF food in ('초밥', '우동', '소바') THEN SET food_type = '일식'; ELSEIF food in ('짜장면', '짬뽕') THEN SET food_type = '중식'; ELSE SET food_type = food; END IF; -- return the customer level RETURN (food_type); END$$ SELECT food, Food_Type(food) FROM food;
Trigger
INSERT/DELETE/UPDATE 실행 전후에 특정 작업을 수행하는 것
--트리거 생성 CREATE TRIGGER before_update BEFORE UPDATE ON afterTBL FOR EACH ROW INSERT INTO beforeTBL SET name = OLD.name, gender = OLD.gender, modified = NOW(); --트리거 사용 UPDATE afterTBL SET name = 'after' WHERE name = 'before'; SELECT * FROM afterTBL; SELECT * FROM beforeTBL;
성능 튜닝: Explain SQL과 Index 튜닝
- Explain SQL: SELECT/UPDATE/INSERT/DELETE 등의 쿼리가 어떻게 수행되는지 내부를 보여주는 SQL 명령(느린 쿼리의 경우 문제가 되는 테이블에 인덱스 붙임)
- EXPLAIN 쿼리문;
- Index: 테이블에서 특정 찾기 작업을 빠르게 수행하기 위해서
MySQL이 별도로 만드는 데이터 구조 - Primary Key, Foreign Key 인덱스 기본
- SELECT/DELETE/JOIN 빨라짐<->INSERT/UPDATE 느려짐
- 테이블 생성할 때 같이 생성 INDEX index_name (index_col)
- 추가 생성
- ALTER TABLE tbl ADD INDEX (column1);
- CREATE UNIQUE INDEX index_name ON tbl column1
@프로그래머스 미니 데브코스 & CNU SW Academy 강의 내용 정리
'모각코' 카테고리의 다른 글
[모각코 6회차] 주문관리 API (0) | 2022.08.11 |
---|---|
[모각코 5회차] SPA와 CORS (0) | 2022.08.04 |
[모각코 4회차] 스프링 AOP와 트랜잭션 (0) | 2022.07.29 |
[모각코 3회차] logback 설정 (0) | 2022.07.22 |
[모각코 1회차] 숫자야구 (0) | 2022.07.08 |