simDev1234
심플하고 차분하게
simDev1234
전체 방문자
오늘
어제
  • 분류 전체보기
    • Computer Science
      • Basic Math
      • Data Structure
      • Algorithm
      • Database
      • OS
    • Language
      • Java
      • Kotlin
      • SQL
    • Framework
      • Spring
      • Orm&Mapper
      • 프로젝트로 스프링 이해하기
      • 스프링 라이브러리
    • Infra
      • Cloud
      • Docker
      • Redis
      • AWS, Azure
      • Device
    • Etc
      • CleanCoding
    • Git,Github

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 자바메모리구조
  • 404
  • controllerTest
  • 자바
  • null
  • scanner #next() #nextLine()
  • 스프링
  • JVM메모리구조
  • 자바프로그래밍
  • 참조타입
  • 자바프로그램
  • 참조변수
  • 컨트롤러

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
simDev1234

심플하고 차분하게

Language/SQL

데이터 처리 - View, 함수/프로시져, 트리거

2022. 8. 20. 02:34

|  VIEW

- 가상의 읽기 전용 테이블

- 장점 :

  - 독립성 : 테이블 구조가 변경되어도 뷰를 쓰는 응용 프로그램은 변경하지 않음

  - 편리성 : 복잡한 쿼리를 뷰로 생성하여 코드를 간결화

  - 보안성 : 계정 권한 수준에 따라 노출되지 않아야 하는 데이터를 숨김 처리 할 수 있음

-- 기본 구문
CREATE VIEW 뷰명 AS
SELECT *
FROM 테이블명

-- 예시
create view v_member as
select
    m.member_type, m.user_id,m.name,
    md.mobile_no, md.marketing_yn, md.register_date
from member as m
    join member_detail md
        on m.member_type = md.member_type and m.user_id = md.user_id
;

 

|  (사용자 정의)함수와 프로시져

  (사용자 정의)함수 프로시져
언제쓰나? 자주쓰는 기능 저장할때 특정 비즈니스 로직을 저장해서 꺼내 쓸 때
공통점 선언부와 구현부가 있는 함수 형태
차이점 반환값 O 반환값 X

A. 함수

-- 기본 구문
CREATE FUNCTION 함수명(매개변수명 타입)
   RETURNS 반환타입
BEGIN
   RETURN
   구현부
END;

-- 예시
-- A. 생성
create function sf_password(password varchar(255))
  returns varchar(255)
begin
  return
  	case 
  	   when length(password) > 2 then 
  	        concat(substring(password, 1, 2), '**')
  	   else '****'
    end;
end;

-- B. 호출
select 
   sf_password(password) as password_mask
from member;

-- C. 삭제
drop function sf_password;

B. 프로시저

-- 기본 구문
CREATE PROCEDURE 함수명()
BEGIN
	구현부
END
;

-- 예시
-- A. 생성
create procedure sp_select_memeber()
begin
    select *
    from member;

    select *
    from member_detail;
end;

-- B. 호출
call sp_select_memeber();

-- C. 삭제
drop procedure sp_select_memeber;

 

C. delimiter를 사용해야 할까?

- 원칙적으로, 함수나 프로시저를 생성할 때, delimiter를 사용하는 것이 필요하다.

  ** delimiter 곧, SQL 명령어 간의 구분은 기본적으로 세미콜론(';')을 통해 이루어지기에,

     SQL 명령어를 구현부에 중첩시키면 하위 명령어는 실행되지 않는 현상이 발생)

- 다만, 툴을 사용하면 delimiter를 사용하지 않아도 오류 없이 잘 실행된다.

delimiter $$  -- delimiter 변경
create procedure sp_select_memeber()
begin
    select *
    from member;

    select *
    from member_detail;
end;
delimiter ;  -- delimiter default인 ;로 원상복구

 

|  트리거

특정 조건이 만족되면 자동으로 실행 시작

rf. 일반적으로 히스토리를 남기는 데에 사용된다.

rf. 상황에 따라 양날의 검이 될 수 있는 명령문이다. (사용에 주의가 필요)

event old new
insert X O
update O O
delete O X
-- RQ. MEMBER 테이블의 핸드폰 번호를 갱신(update)할 때마다 히스토리를 남기고 싶다.

-- A. 변경 사항 담을 히스토리 테이블
create table member_detail_history
(
    id int auto_increment primary key ,
    member_type varchar(10),
    user_id varchar(50),
    mobile_no varchar(50),
    new_mobile_no varchar(50),
    update_date datetime
);

-- B. 트리거 예시
delimiter &&
create trigger tg_member_mobile_no_history
    before update on member_detail -- update 되기 이전에 트리거가 일어난다.
    for each row
    begin
        insert into member_detail_history
        (
          member_type,
          user_id,
          mobile_no,
          new_mobile_no,
          update_date
         )
        values
        (
          old.member_type,
          old.user_id,
          old.mobile_no,
          new.mobile_no,
          now()
        );
    end;
delimiter ;

 

 

[ 출처 ]

- 부트캠프 강의를 들은 후 정리한 내용입니다.

'Language > SQL' 카테고리의 다른 글

[데이터베이스 설계] Exerd를 통해 설계해보기  (0) 2022.08.27
[데이터베이스 설계] 데이터 모델링  (0) 2022.08.27
데이터 처리 - ALIAS, JOIN, 내장함수, 페이징 처리  (0) 2022.08.17
데이터 처리 - CRUD  (0) 2022.08.16
테이블 - 데이터 자료형, DDL/툴을 통한 생성 및 삭제  (0) 2022.08.15
    'Language/SQL' 카테고리의 다른 글
    • [데이터베이스 설계] Exerd를 통해 설계해보기
    • [데이터베이스 설계] 데이터 모델링
    • 데이터 처리 - ALIAS, JOIN, 내장함수, 페이징 처리
    • 데이터 처리 - CRUD
    simDev1234
    simDev1234
    TIL용 블로그. * 저작권 이슈가 있는 부분이 있다면 댓글 부탁드립니다.

    티스토리툴바