> 데이터 베이스 > MySQL 튜토리얼 > mysql에서 저장 프로시저를 만드는 방법

mysql에서 저장 프로시저를 만드는 방법

(*-*)浩
풀어 주다: 2019-05-11 09:54:51
원래의
8392명이 탐색했습니다.

저장 프로시저: 특정 기능을 완료하기 위한 SQL 문 집합인 프로그래밍 가능한 함수 집합입니다. 사용자는 저장 프로시저의 이름을 지정하고 필요한 경우 매개변수를 제공할 수 있습니다. 호출 실행.

추천 과정: MySQL 튜토리얼.

mysql에서 저장 프로시저를 만드는 방법

장점(저장 프로시저를 사용하는 이유):

① 고도로 반복적인 일부 작업을 저장 프로시저로 캡슐화하여 이러한 SQL에 대한 호출을 단순화합니다.

② 일괄 처리: SQL + 루프, 트래픽 감소, 즉 " 배치 실행"

3데이터 보안을 보장하기 위한 인터페이스 통합

Oracle 데이터베이스에 비해 MySQL의 저장 프로시저는 상대적으로 약하고 덜 사용됩니다.

1. 저장 프로시저 생성 및 호출

  >저장 프로시저는 특정 기능을 완료하는 데 사용되는 이름을 가진 코드 조각입니다.

  >생성된 저장 프로시저는 데이터베이스의 데이터 사전에 저장됩니다.

1. 저장 프로시저 만들기

CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL  | [NOT] DETERMINISTIC  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]
로그인 후 복사

#예제 작업을 위한 데이터베이스 만들기 및 데이터 테이블 백업

mysql> create database db1;
mysql> use db1;    
mysql> create table PLAYERS as select * from TENNIS.PLAYERS;
mysql> create table MATCHES  as select * from TENNIS.MATCHES;
로그인 후 복사

예: 특정 플레이어가 플레이한 모든 게임을 삭제하는 저장 프로시저 만들기

mysql> delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
    -> BEGIN
    ->   DELETE FROM MATCHES
    ->    WHERE playerno = p_playerno;
    -> END$$
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;  #将语句的结束符号恢复为分号
로그인 후 복사

분석:

By 기본, 저장 프로시저는 기본 데이터베이스와 연결됩니다. 저장 프로시저가 특정 데이터베이스에 생성되도록 지정하려면 프로시저 이름 앞에 접두사로 데이터베이스 이름을 추가하세요. DELIMITER $$ 명령을 사용하여 문의 끝 기호를 변경합니다. 프로시저 본문에 사용된 세미콜론이 클라이언트(예: mysql)에서 해석되지 않고 서버에 직접 전달되도록 세미콜론이 일시적으로 두 개의 $$로 변경됩니다. .

2. 저장 프로시저의 매개변수

  저장 프로시저는 0개 이상의 매개변수를 가질 수 있으며 저장 프로시저 정의에 사용됩니다.

3 매개변수 유형:

IN 입력 매개변수: 호출자가 프로세스에 값을 전달함을 나타냅니다(수신 값은 리터럴 또는 변수일 수 있음)

OUT 출력 매개변수: 프로세스가 호출자에게 값을 전달함을 나타냄( 여러 값을 반환할 수 있음) 값) (나가는 값은 변수만 가능)

INOUT 입력 및 출력 매개변수: 호출자가 프로세스에 값을 전달한다는 의미일 뿐만 아니라 프로세스가 프로세스에 값을 전달한다는 의미도 있음 caller (값은 변수만 가능)

1. 입력 매개변수

mysql> delimiter $$
mysql> create procedure in_param(in p_in int)    -> begin    ->   select p_in;    ->   set p_in=2;    ->    select P_in;    -> end$$
mysql> delimiter ;
mysql> set @p_in=1;
mysql> call in_param(@p_in);+------+
| p_in |
+------+
|    1 |
+------+
+------+
| P_in |
+------+
|    2 |
+------+mysql> select @p_in;+-------+
| @p_in |
+-------+
|     1 |
+-------+
로그인 후 복사

#에서 알 수 있듯이 p_in은 저장 프로시저 중에 수정되지만 @p_id 값에는 영향을 미치지 않습니다. 전자는 지역변수이고 후자는 전역변수이다.

2.out 출력 매개변수

mysql> delimiter //mysql> create procedure out_param(out p_out int)    ->   begin    ->     select p_out;    ->     set p_out=2;    ->     select p_out;    ->   end    -> //mysql> delimiter ;

mysql> set @p_out=1;

mysql> call out_param(@p_out);+-------+
| p_out |
+-------+
|  NULL |
+-------+  #因为out是向调用者输出参数,不接收输入的参数,所以存储过程里的p_out为null+-------+
| p_out |
+-------+
|     2 |
+-------+mysql> select @p_out;+--------+
| @p_out |
+--------+
|      2 |
+--------+  #调用了out_param存储过程,输出参数,改变了p_out变量的值
로그인 후 복사

3.inout 입력 매개변수

mysql> delimiter $$
mysql> create procedure inout_param(inout p_inout int)    ->   begin    ->     select p_inout;    ->     set p_inout=2;    ->     select p_inout;    ->   end    -> $$
mysql> delimiter ;

mysql> set @p_inout=1;

mysql> call inout_param(@p_inout);+---------+
| p_inout |
+---------+
|       1 |
+---------+

+---------+
| p_inout |
+---------+
|       2 |
+---------+mysql> select @p_inout;+----------+
| @p_inout |
+----------+
|        2 |
+----------+
로그인 후 복사

#inout_param 저장 프로시저를 호출하고, 입력 매개변수를 승인하고, 매개변수를 출력하고, 변수를 변경합니다.

참고:

① 프로세스에 매개변수, 프로시저 이름 뒤에도 괄호를 써야 합니다

 예: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ...

②매개변수 이름과 매개변수 이름이 같지 않도록 하세요. 그렇지 않으면 프로시저 본문에서 매개변수 이름이 열 이름으로 처리됩니다.

> 입력 값에 in 매개변수 사용

> 가능한 한 적게.

위 내용은 mysql에서 저장 프로시저를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿