TIL: mysql day7

Seungeun·2025년 3월 3일

인덱스

  1. 클러스터형 인덱스
  • 클러스터형 인덱스를 기본키로 지정하면 자동으로 생성된다.
  • 새로운 열이 입력되어도 자동으로 정렬된다.(기본키에 따라)
  • 데이터가 자동으로 인덱스에 따라 정렬된다.
  • 테이블 당 1개만 생성가능
    - 열을 묶어서 가능 (복합키 composite key)
  1. 비클러스터형 인덱스
  • 인덱스 페이지에 데이터 주소를 정렬해 저장
    CREATE INDEX ix_tablename ON tablename (colname);
  • 조회 시 데이터가 정렬되어있지 않음

사용이유
1. 복잡한 쿼리를 단축
2. 보안성: 테이블, 열 이름을 숨기거나 권한에 따라 필요한 열만 구성가능

  • 그러나, 인덱스를 가질 수 없고, 변경 불가
CREATE VIEW viewName
AS 
	SELECT 필요한 열 나열.. FROM table;
SELECT * FROm viewName;
  • view 확인: DESCRIBE viewName, SHOW CREATE VIEW viewName
  • 뷰보다 원본테이블을 변경하거나 데이터 추가하는 것이 나음

스토어드 함수

SET GLOBAL log_bin_trust_function_creators = 1;

DELIMITER $$
CREATE FUNCTION functionName(인수)
	RETURNS 반환 데이터 유형
BEGIN
    RETURN ;
END $$
DELIMITER ;

커서

테이블의 데이터를 1행씩 처리, 스토어드 프로시저 내부에서 사용

DELIMITER $$
CREATE PROCEDUER procedureName()
BEGIN
	DECLARE endOfRow BOOLEAN DEFAULT FALSE;
	DECLARE idCursor() CURSOR FOR #커서 선언
    
    DECLARE CONTINUE HANDLER
    FOR NOT FOUND SET endOfRow;
    
    OPEN idCursor;
    ...
    FETCH idCursor INTO user_payment_id;
    IF endOfRow THEN
    	LEAVE ..
    END IF;
    ...
    
    CLOSE idCursor;
END $$
DELIMITER ;

트리거

  • 이전 값의 상태를 별도의 테이블에 보관하고 싶을 때 사용될 수 있음
  • MYSQL에서는 DDL X, DML O
  • 트리거 실행 시기를 정할 수 있음 -> BEFORE & AFTER
  • 매개변수 사용 불가
  • 뷰에 트리거 사용 불가
  • 행, 문장 트리거가 있음
delimiter $$
CREATE TRIGGER triggerName
AFTER[BEFORE] UPDATE
ON tableName1
FOR EACH ROW

BEGIN
	트리거 내용
END $$
DELIMITER ;
profile
Wonderland

0개의 댓글