저장 프로시저: 특정 기능을 완료하기 위한 SQL 문 집합인 프로그래밍 가능한 함수 집합입니다. 사용자는 저장 프로시저의 이름을 지정하고 필요한 경우 매개변수를 제공할 수 있습니다. 호출 실행.
추천 과정: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!