View

Gwonyeong·2023년 1월 25일
0

MySQL

목록 보기
3/3

View

  • CREATE VIEW {view-name} as SELECT...
  • 보통 뷰 이름 앞에 v_를 많이 붙임.
  • information_schema.views where table_schema={table-name}
    • 뷰의 정보를 확인할 수 있음.

왜 뷰를 쓸까?

  • 보안 : 테이블에 직접 접근하지 못하는 유저에게 뷰를 제공하는 것.
  • 쿼리가 단순해짐
  • compiled query (prepared statement)
  • 필요한 것만 출력

Trigger

  • 어떤 액션이 실행되면 함께 실행시켜라
  • 특정 테이블에 INSERT, DELETE, UPDATE같은 DML문이 수행되면 데이터베이스에서 자동으로 동작하도록 작성된 프로그램.
    • 사용되는 예시:
      • 일자별 상품 판매수량, 판매금액을 집계한다던가
Create Trigger {trigger-name}
    { BEFORE | AFTER } { INSERT | UPDATE | DELETE }

    { PRECEDES | FOLLOWS } other-trigger-name


    on {table-name} FOR EACH ROW
    BEGIN
        ... OLD.col , NEW.col
  • BEFORE : 이벤트 발생 이전에 트리거 실행
  • AFTER : 이벤트 발생 후 트리거 실행

ex:

  • BEFORE DELETE ON A
    • A테이블에서 데이터가 삭제 되기 전에 트리거 실행

KEYWORD

  • OLD
    • 이전의 데이터
    • DELETE로 삭제되기 전 또는 UPDATE로 바뀌기 전의 데이터
  • NEW
    • 새로운 데이터
    • INSERT 로 삽입된 데이터, UPDATE로 바뀐 후의 데이터.
  • DELETE는 NEW키워드를 사용할 수 없고 INSERT는 OLD키워드를 사용할 수 없을 것임!

UNION

SELECT * FROM Subject WHERE classroom < 3
    UNION
    SELECT * FROM Subject WHERE classroom < 5;
  • union은 중복된 row를 제거하고 테이블을 합침.
  • UNION은 리소스가 많이 투입되기 때문에 가능하면 사용하지 않는 방향이 좋음.

FUNCTION

CREATE FUNCTION '함수명' (
파라미터
) RETURNS 반환할 데이터타입
BEGIN
	수행할 쿼리
	RETURN 반환할 값
END
CREATE DEFINER=`gwonyeong`@`localhost` FUNCTION `f_randname`() RETURNS varchar(31) CHARSET utf8mb4
BEGIN
	declare v_ret varchar(31);
    declare v_lasts varchar(255) default '김이박조최전';
    declare v_firsts varchar(255) default '순신세종성호지헤가은세호윤국';

	set v_ret = concat( f_rand1(v_lasts), f_rand1(v_firsts), f_rand1(v_firsts));
RETURN v_ret;
END

이와 같은 함수를 작성하면 query문에서는 f_randname()으로 접근할 수 있고 결과값을 DB에 저장하는데 사용할 수 있음.

f_rand()

CREATE DEFINER=`gwonyeong`@`localhost` FUNCTION `f_rand1`(_str varchar(255)) RETURNS varchar(31) CHARSET utf8mb4
BEGIN
	declare v_ret varchar(31);

    declare v_len tinyint;

    set v_len = char_length(_str);
    set v_ret = substring(_str, CEIL(rand() * v_len), 1);

RETURN v_ret;
END

이와 같이 생겼는데 받은 파라미터 문자열에서 랜덤한 1글자를 반환해줌.

이러한 방법으로 랜덤한 이름을 생성하여 여러개의 테스트 데이터를 만들 수 있었음.

profile
부동의 첫사랑

0개의 댓글