SQL 저장 프로시저 개요

4997 단어 mysqldatabase
안녕하세요, 이 블로그는 MYSQL 저장 프로시저에 관한 것입니다. 저장 프로시저에 대한 초보자 가이드 또는 소개로 생각하십시오. 따라 하려면 데이터베이스/테이블 생성 및 간단한 DML(데이터 조작 언어) 쿼리(INSERT, UPDATE 및 DELETE)와 같은 MYSQL 작업에 대한 기본 이해를 알고 있어야 합니다. 및 DQL(데이터 쿼리 언어) 쿼리(SELECT).

Feel Free to comment down below you find any mistake or suggestion to improve 😊



시작하자




뭐 ? 저장 프로 시저입니까?



In in a simple term, it’s just the bunch of SQL instructions (queries) run together, just like a function in other programming languages.

A stored procedure is a prepared SQL code that you can save, so the code can be reused over and over again. So if you have an SQL query that you write over and over again, save it as a stored procedure, and then just call it to execute it. You can also pass parameters to a stored procedure so that the stored procedure can act based on the parameter value(s) that is passed. – W3School



언제 ? 그것을 사용하려면?



예를 들어, 순서대로 실행해야 하는 일련의 지침이 있고 무언가를 놓치면 문제가 될 수 있습니다. 단일 쿼리를 실행하는 것은 지루할 것입니다. 그러나 일상적인 작업을 위한 저장 프로시저를 만들면 단일 저장 프로시저 호출로 쉽게 실행할 수 있습니다.

어디에 ? 그것을 사용하려면?



주기적인 데이터 처리가 필요합니다.

왜요 ? 그것을 사용하려면?


  • 모듈식 프로그래밍이 가능합니다.
  • 더 빠른 실행을 허용합니다.
  • 네트워크 트래픽을 줄일 수 있습니다.
  • 보안 메커니즘으로 사용할 수 있습니다.
  • 동일한 세션에서 동일한 저장 프로시저를 다시 호출하면 MySQL은 다시 컴파일할 필요 없이 캐시에서 저장 프로시저를 실행합니다.

  • Below query will run on MariaDB MYSQL but for other SQL, some commands may differ.




    쿼리를 받아보자!



    아래 예에서는 아래 제품 테이블을 고려합니다.


    ID
    이름
    스쿠
    수량
    상태


    1
    사과
    10000034
    50
    1

    2

    10000032
    10
    0


    데스크탑
    10000031
    1
    1

    4
    생쥐
    10000030
    23
    1

    5
    그래픽 카드
    10000021
    56
    !


    구분자 란 무엇입니까? 그것을 변경하는 방법?



    A _delimiter _is a sequence of one or more characters for specifying the boundary between separate, independent regions in plain text or other data streams – wikipedia.org



    SQL 쿼리를 작성할 때 다음 예와 같이 세미콜론(;)을 사용하여 두 문을 구분합니다.

    SELECT name FROM Product;
    SELECT sku FROM Product;
    


    SQL Default의 경우 Delimiter/End of SQL 쿼리는 세미콜론(;)이지만 기본 구분자를 달러($)로 변경하려면 다음 예와 같이:

    DELIMITER $$
    
    


    구분 문자는//또는 $$와 같은 단일 또는 이중 문자로 구성될 수 있지만 백슬래시는 시퀀스를 이스케이프하므로 사용하지 않아야 합니다.

    명령줄에서 저장 프로시저를 만들 때 일반 구분 기호와 BEGIN END 블록 내부의 구분 기호를 구분해야 합니다. 더 잘 이해하려면 다음 예를 고려하십시오.

    CREATE PROCEDURE  PROCEDURE_NAME() 
     BEGIN
     SELECT name FROM customer;
    END;
    


    명령줄에 위의 코드를 한 줄씩 입력하면 MYSQL 클라이언트는 세미콜론(;)을 명령문의 끝으로 해석하고 예외를 throw합니다. 그래서 임시로 기본값이 아닌 구분자를 변경합니다.

    🎉자신만의 저장 프로시저를 작성하는 방법🎉



    기본 구분 기호를 변경하여 시작합니다. 모든 SQL 문은 아래와 같이 BEGIN 및 END 키워드로 래핑됩니다.

    DELIMITER $$
      CREATE PROCEDURE PROCEDURE_NAME() 
       BEGIN
        /* Procedure code  */ 
        END $$
    DELIMITER ;
    


    동일한 이름의 저장 프로시저가 이미 존재하는 경우 예외가 발생합니다.

    procedure with the same name already exists



    저장 프로시저를 실행하려면 SQL 쿼리 아래에서 실행

    CALL PROCEDURE_NAME();
    


    저장 프로시저 삭제

    저장 프로시저가 없으면 예외가 발생합니다. 이를 방지하기 위해 조건부 검사[IF EXISTS ] 절을 추가할 수 있습니다.

    DROP PROCEDURE PROCEDURE_NAME;
        /* OR */
    DROP PROCEDURE IF EXISTS PROCEDURE_NAME; 
    


    저장 프로시저 목록 가져오기:

    SHOW PROCEDURE STATUS;
    



    Output : –
    
                      Db: testSP
                    Name: udpateStatus
                    Type: PROCEDURE
                 Definer: root@%
                Modified: 2020-02-24 13:17:58
                 Created: 2020-02-24 13:17:58
           Security_type: DEFINER
                 Comment: 
    character_set_client: utf8
    collation_connection: utf8_general_ci
      Database Collation: latin1_swedish_ci
    
    


    결과를 필터링하려면 아래와 같이 WHERE 절을 추가하기만 하면 됩니다.

    SHOW PROCEDURE STATUS WHERE Db= DATABASE_NAME;
    


    결론

    다음 포스트에서는 변수, 조건, 루프, 커서와 같은 저장 프로시저에 대해 자세히 설명하겠습니다.

    좋은 웹페이지 즐겨찾기