Language/SQL 17

[MySQL] 자동으로 실행되는 트리거 (Trigger) 에 대해 알아보자

트리거 (Trigger)데이터의 무결성을 위한 기능이다.테이블에 INSERT, UPDATE, DELETE 작업이 발생하면 실행되는 코드 (DML 작업)예시퇴사자의 정보를 DELETE 하려고 할 때 다른 별도의 장소에 자동으로 저장해둔다. - 트리거 이해를 위한 테이블 생성 및 트리거 부착하기// 테이블 생성USE market_db;CREATE TABLE IF NOT EXISTS trigger_table (id INT, txt VARCHAR(10));INSERT INTO trigger_table VALUES(1, '레드벨벳');INSERT INTO trigger_table VALUES(2, '잇지');INSERT INTO trigger_table VALUES(3, '블랙핑크');// 테이블에 트리거 부착(..

Language/SQL 2024.08.21

[MySQL] 스토어드 함수와 커서에 대해 알아보자

스토어드 함수 (Stored Function)MySQL이 제공하는 내장함수 외에, 직접 함수를 만드는 기능을 제공한다.스토어드 프로시저와 모양은 비슷하나 다른 개념이다.RETURNS 예약어를 통해 하나의 값을 반환한다. - 기본 형태DELIMITER $$CREATE FUNCTION 스토어드_함수_이름(매개변수) RETURNS 반환_형식BEGIN 프로그래밍_코딩 RETURN 반환값; END $$DELIMITER ;SELECT 스토어드_함수_이름();    스토어드 함수의 사용스토어드 함수를 사용하기 전에 스토어드 함수 생성 권한을 허용해줘야 한다.SET GLOBAL log_bin_trust_function_creator = 1;  - 숫자 2개의 합을 계산하는 스토어드 함수USE market_db;DROP..

Language/SQL 2024.08.21

[MySQL] 스토어드 프로시저 (Stored Procedure) 에 대해 알아보자

스토어드 프로시저 (Stored Procedure)MySQL에서 제공하는 프로그래밍 기능쿼리문의 집합, 한 동작을 일괄 처리하는 용도로 사용 - 스토어드 프로시저 생성DELIMITER $$CREATE PROCEDURE 스토어드_프로시저_이름(IN 또는 OUT 매개변수)BEGIN 스토어드_프로시저_내용END $$DELIMITER ;  - 스토어드 프로시저 호출 (실행)CALL 스토어드_프로시저_이름();    매개 변수로 유연하고 강력한 스토어드 프로시저 만들기  입력 매개 변수 - 입력 매개 변수 지정IN 입력_매개변수_이름 데이터_형식 - 입력 매개 변수가 있는 스토어드 프로시저 실행CALL 프로시저_이름(전달_값);   - 1개의 입력 매개 변수가 있는 스토어드 프로시저 생성 / 호출USE m..

Language/SQL 2024.08.21

[MySQL] 인덱스를 활용해보자

인덱스의 생성과 제거 인덱스 생성 문법CREATE [UNIQUE] INDEX 인덱스_이름 ON 테이블_이름 (열_이름) [ASC|DESC]📌 CREATE INDEX 로 생성되는 인덱스는 보조 인덱스📌 UNIQUE 는 중복이 안 되는 고유 인덱스를 생성 인덱스 제거 문법DROP INDEX 인덱스_이름 ON 테이블_이름📌 기본 키, 고유 키로 자동 생성된 인덱스는 DROP INDEX로 제거하지 못한다📌 자동 생성된 인덱스는 ALTER TABLE 문으로 기본 키와 고유 키를 제거한 후에 제거 가능  - 인덱스 생성 실습 : 마켓 데이터베이스의 회원 테이블 데이터 조회해보기use market_db;select * from member  - 인덱스 확인하기show index from member;→ mem..

Language/SQL 2024.08.21

[MySQL] 인덱스의 내부 작동 방식을 이해하자

균형 트리클러스터형 인덱스와 보조 인덱스 모두 내부적으로 균형 트리(B-tree) 자료 구조이다. 균형 트리 (Balanced Tree, B-Tree)최상단의 노드 : 루트 노드중간 노드최하단의 노드 : 리프 노드 MySQL 에서 노드는 ‘페이지’ → 페이지는 최소한의 저장 단위균형 트리로 검색하지 않으면 처음부터 끝까지 Full Scan 해야한다.루트 페이지에서 첫번 째 검색 후 , 리프 페이지에서 검색 (효율 good)   균형 트리의 페이지 분할 페이지 분할 : 새로운 페이지를 준비해서 데이터를 나누는 작업이다.→ 페이지 분할이 일어나면 MySQL 이 느려지고, 자주 발생하면 성능이 저하된다.    인덱스의 구조  - 클러스터형 인덱스 구성하기  use market_db;create table cl..

Language/SQL 2024.08.21

[MySQL] 인덱스의 개념을 알아보자

인덱스의 개념 인덱스 : 데이터를 빠르게 찾을 수 있도록 하는 도구클러스터형 인덱스 : 기본 키로 지정 시 자동 생성, 테이블에 1개만 생성 가능보조 인덱스 : 고유 키로 지정하면 자동 생성, 여러 개 생성 가능, 자동 정렬 x  인덱스의 장점SELECT 문 검색 속도 향상컴퓨터의 부담 감소 → 전체 시스템 성능 향상   인덱스의 단점 인덱스도 공간을 차지하기 때문에 DB 내에 추가적인 공간이 필요하다.처음 인덱스 생성 시 시간 소요된다.SELECT가 아닌 INSERT, UPDATE, DELETE가 자주 일어나면 오히려 성능 저하를 유발하게 된다.   인덱스의 종류   클러스터형 인덱스→ 자동으로 생성되는 인덱스 - 자동으로 생성되는 인덱스 확인하기use market_db;create table tabl..

Language/SQL 2024.08.21

[MySQL] 가상의 테이블인 뷰(View)에 대해 알아보자

뷰 (View) 테이블과 밀접하게 연관되어 있는 데이터베이스 개체이다.테이블처럼 데이터를 가지고 있지는 않다.  단순 뷰, 복합 뷰 로 구분된다.  뷰 (View) 의 기본 생성- 뷰를 만드는 형식CREATE VIEW 뷰_이름AS SELECT 문; - 뷰에 접근하는 방식SELECT 열_이름 FROM 뷰_이름 [WHERE 조건]; - 회원 테이블의 아이디, 이름, 주소에 접근하는 뷰 생성, 접근하기// 뷰 생성USE market_db;CREATE VIEW v_memberAS SELECT mem_id, mem_name, addr FROM member; // 뷰 접근SELECT * FROM v_member; 뷰의 실체는 SELECT 문이다   뷰를 사용하는 이유 📌 보안(security)에 ..

Language/SQL 2024.08.21

[MySQL] 제약조건에 대해 알아보자

제약조건의 기본 개념과 종류 제약 조건 : 데이터의 무결성을 지키기 위해 제한하는 조건데이터의 무결성 : ‘데이터에 결함이 없음’ MySQL에서 제공하는 제약조건PRIMARY KEYFOREIGN KEYUNIQUECHECKDEFAULTNULL 값 허용  기본 키 제약조건기본 키 (Primary key) : 데이터를 구분할 수 있는 식별자, 중복 X, NULL값 입력 X                                    기본키로 생성한 것은 자동으로 클러스터형 인덱스가 생성된다.  - CREATE TABLE 에서 생성하는 기본 키 제약조건📌 열 이름 뒤에 PRIMARY KEY 를 붙여주기USE naver_db;DROP TABLE IF EXISTS buy, member;CREATE TABLE m..

Language/SQL 2024.08.21

[MySQL] SQL 프로그래밍

IF 문 조건식이 참이면 ‘SQL문장’을 실행하고, 그렇지 않으면 그냥 넘어간다.IF THEN SQL문장END IF; 📌 SQL 문장이 두 문장 이상이라면 BEGIN ~ END 로 묶어주어야 한다DROP PROCEDURE IF EXISTS ifProc1;DELIMITER $$CREATE PROCEDURE ifProc1()BEGIN IF 100 = 100 THEN SELECT '100은 100과 같습니다.'; END IF;END $$DELIMITER; CALL ifProc1();     IF ~ ELSE 문 조건에 따라 다른 부분을 수행한다.조건식이 참이면 ‘SQL문장1’을 실행, 그렇지 않으면 ‘SQL문장2’를 실행한다. DROP PROCEDURE IF EXISTS ifProc2;..

Language/SQL 2024.08.21

[MySQL] 두 테이블을 묶는 조인(JOIN)에 대해 알아보자

조인 (JOIN) 두 개의 테이블을 서로 묶어서 하나의 결과를 만들어 내는 것을 말한다.  일대다 (one to many) 관계의 이해market_db의 회원테이블과 구매테이블 회원테이블의 아이디는 PRIMARY KEY로 지정해서 1개씩만 존재구매테이블의 아이디는 FOREIGN KEY로, 여러번 구매를 할 수 있음→ 일대다 관계를 PK-FK 관계라고도 한다   내부 조인 (INNER JOIN) SELECT FROM INNER JOIN ON [WHERE 검색 조건]// INNER JOIN을 그냥 JOIN이라고 써도 INNER JOIN으로 인식한다  - 구매 테이블에서 ‘GRL’ 아이디를 가진 사람의 회원 정보를 조회하기 위해 회원 테이블을 조인하기USE market_db;SELECT * FRO..

Language/SQL 2024.08.21