>데이터 베이스 >MySQL 튜토리얼 >mysql 저장 프로시저의 용도는 무엇입니까?

mysql 저장 프로시저의 용도는 무엇입니까?

青灯夜游
青灯夜游원래의
2023-04-04 15:43:072694검색

mysql 저장 프로시저의 기능: 1. 사용하기 쉬운 단위로 처리를 캡슐화하여 복잡한 작업을 단순화합니다. 2. 변경 사항 관리를 단순화합니다. 3. 애플리케이션 성능을 개선합니다. 4. 애플리케이션과 애플리케이션 간의 트래픽을 줄입니다. 데이터베이스 서버, 애플리케이션은 여러 개의 긴 SQL 문을 보낼 필요가 없고 저장 프로시저의 이름과 매개변수만 보낼 필요가 있기 때문입니다. 5. mysql이 복잡한 판단과 더 복잡한 작업을 완료할 수 있도록 SQL 문의 기능과 유연성을 향상시킬 수 있습니다. 6. 데이터베이스의 보안과 데이터의 무결성 등을 향상시킬 수 있습니다.

mysql 저장 프로시저의 용도는 무엇입니까?

이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.

저장 프로시저 소개

저장 프로시저는 특정 기능을 완료하도록 설계된 SQL 문 집합입니다. 저장 프로시저를 사용하는 목적은 SQL 문과 함께 일반적이거나 복잡한 작업을 미리 작성하여 지정된 이름으로 저장하는 것입니다. 이 프로시저를 컴파일하고 최적화하여 데이터베이스 서버에 저장하므로 저장 프로시저라고 합니다. 향후 정의된 저장 프로시저와 동일한 서비스를 제공하기 위해 데이터베이스가 필요한 경우 "CALL 저장 프로시저 이름"만 호출하면 자동으로 완료됩니다.

데이터베이스를 운영하는데 흔히 사용되는 SQL 문은 먼저 컴파일한 후 실행해야 합니다. 저장 프로시저는 SQL 문을 실행하는 데 또 다른 접근 방식을 사용합니다.

저장 프로시저는 데이터베이스에 생성되고 저장되는 프로그래밍 가능한 함수입니다. 일반적으로 SQL 문과 일부 특수 제어 구조로 구성됩니다. 저장 프로시저는 다양한 애플리케이션이나 플랫폼에서 동일한 특정 기능을 수행하려는 경우 특히 적합합니다.

MySQL 5.0 버전은 이전에는 저장 프로시저를 지원하지 않아 MySQL 적용이 크게 줄었습니다. MySQL은 버전 5.0부터 저장 프로시저를 지원해 데이터베이스의 처리 속도를 향상시킬 뿐만 아니라 데이터베이스 프로그래밍의 유연성도 향상시킵니다. 저장 프로시저는 데이터베이스에서 데이터 변환, 데이터 마이그레이션에 사용할 수 있는 중요한 기능입니다. , 보고서 작성은 프로그래밍 언어와 유사합니다. 성공적으로 실행되면 언제든지 호출하여 지정된 기능 작업을 완료할 수 있습니다.

저장 프로시저를 사용하면 데이터베이스 액세스 효율성이 향상될 뿐만 아니라 데이터베이스 사용 보안도 향상됩니다.

호출자의 경우 저장 프로시저가 SQL 문을 캡슐화하므로 호출자는 논리 함수의 특정 구현 프로세스를 고려할 필요가 없습니다. 간단한 호출만으로 Java, C# 등 프로그래밍 언어에서 호출할 수 있습니다.

저장 프로시저의 역할(장점)

사용하기 쉬운 단위로 처리를 캡슐화하여 복잡한 작업을 단순화합니다.
  • 변경 관리를 단순화합니다. 테이블 이름, 열 이름 또는 비즈니스 로직이 변경되는 경우. 저장 프로시저의 코드만 변경하면 되며 이를 사용하는 사람들은 자신의 코드를 변경하지 않습니다.
  • 일반적으로 저장 프로시저는 애플리케이션 성능을 향상시키는 데 도움이 됩니다. 생성된 저장 프로시저가 컴파일되면 데이터베이스에 저장됩니다. 그러나 MySQL은 저장 프로시저를 약간 다르게 구현합니다. MySQL 저장 프로시저는 요청 시 컴파일됩니다. 저장 프로시저를 컴파일한 후 MySQL은 이를 캐시에 저장합니다. MySQL은 각 연결에 대해 자체 저장 프로시저 캐시를 유지합니다. 애플리케이션이 단일 연결에서 저장 프로시저를 여러 번 사용하는 경우 컴파일된 버전을 사용하세요. 그렇지 않으면 저장 프로시저가 쿼리처럼 작동합니다. 여러 개의 긴 SQL 문을 보낼 필요는 없지만 저장 프로시저의 이름과 매개변수만 있으면 SQL 문의 기능과 유연성을 향상시킬 수 있습니다.
  • 저장 프로시저는 흐름 제어 문으로 작성할 수 있습니다. 유연성은 복잡한 판단과 더욱 복잡한 작업을 완료할 수 있습니다.

  • 데이터베이스 보안 및 데이터 무결성 향상

  • 저장 프로시저의 보안을 향상시키는 한 가지 방법은 저장 프로시저를 중간 구성 요소로 사용하는 것입니다. 저장 프로시저에서는 특정 테이블에 대해 관련 작업을 수행할 수 있으며 저장 프로시저가 제공됩니다. 인터페이스로. 이런 방식으로 외부 프로그램은 데이터베이스 테이블을 직접 조작할 수 없으며 저장 프로시저를 통해서만 해당 테이블을 조작할 수 있으므로 보안이 어느 정도 향상될 수 있습니다.

  • 데이터 독립화

    데이터 독립성은 분리 효과를 얻을 수 있습니다. 즉, 프로그램은 여러 SQL 문을 실행하는 대신 저장 프로시저를 호출할 수 있습니다. 이 경우 저장 프로시저는 데이터 테이블의 구조가 변경되어도 테이블을 호출할 때 프로그램을 수정할 필요가 없다는 장점이 있습니다. .
  • 저장 프로시저의 단점
  • 많은 저장 프로시저를 사용하는 경우 이러한 저장 프로시저를 사용하는 각 연결의 메모리 사용량이 크게 늘어납니다. 또한, 저장 프로시저에서 많은 수의 논리 연산을 과도하게 사용하면 CPU 사용량도 증가합니다. 왜냐하면 MySQL 데이터베이스의 원래 설계는 효율적인 쿼리에 초점을 맞추고 논리 연산에 도움이 되지 않기 때문입니다.
  • 저장 프로시저를 구성하면 복잡한 비즈니스 로직이 포함된 저장 프로시저를 개발하기가 더 어려워집니다.

  • 저장 프로시저를 디버그하기가 어렵습니다. 소수의 데이터베이스 관리 시스템에서만 저장 프로시저를 디버깅할 수 있습니다. 안타깝게도 MySQL은 저장 프로시저를 디버깅하는 기능을 제공하지 않습니다.

  • 저장 프로시저를 개발하고 유지 관리하는 것은 쉽지 않습니다. 저장 프로시저를 개발하고 유지 관리하려면 모든 응용 프로그램 개발자가 보유하지 않은 전문 기술이 필요한 경우가 많습니다. 이로 인해 애플리케이션 개발 및 유지 관리 단계에서 문제가 발생할 수 있습니다.

MySQL의 저장 프로시저

프로시저 생성 및 호출

저장 프로시저 생성, 코드는 다음과 같습니다.

-- 创建存储过程 
create procedure mypro(in a int,in b int,out sum int) 
begin 
set sum = a+b; 
end;

실행 결과는 다음과 같습니다

mysql 저장 프로시저의 용도는 무엇입니까?

다음과 같을 수도 있습니다. Navicat 클라이언트에서 사용됨" 아래 그림과 같이 "Function" 노드 아래의 프로세스를 봅니다.

mysql 저장 프로시저의 용도는 무엇입니까?

저장 프로시저를 호출합니다. 코드는 다음과 같습니다.

call mypro(1,2,@s);-- 调用存储过程 
select @s;-- 显示过程输出结果

Running results

mysql 저장 프로시저의 용도는 무엇입니까?

저장 프로시저 구문 분석

  • 프로시저 생성은 프로시저를 생성하는 데 사용됩니다. create procedure 用来创建过程;
  • mypro 用来定义过程名称;
  • (in a int,in b int,out sum int)表示过程的参数,其中 in 表示输入参数,out 表示输出参数。类似于 Java 定义方法时的形参和返回值;
  • beginend 表示过程主体的开始和结束,相当于 Java 定义方法的一对大括号;
  • call用来调用过程,@s 是用来接收过程输出参数的变量

存储过程的参数

MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:

  • IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量);
  • OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量);
  • INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。

存储过程根据参数可分为四种类别:

1).没有参数的过程;

2).只有输入参数的过程;

3).只有输出参数的过程;

4).包含输入和输出参数的过程。

变量

MySQL 中的存储过程类似 java 中的方法。

既然如此,在存储过程中也同样可以使用变量。java 中的局部变量作用域是变量所在的方法,而 MySQL 中的局部变量作用域是所在的存储过程。

变量定义

DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
  • declare用于声明变量;

  • variable_name表示变量名称;

  • datatype为 MySQL 的数据类型;

  • default用于声明默认值;

  • 例如:

    declare name varchar(20) default ‘jack’。

变量赋值

SET 变量名 = 表达式值 [,variable_name = expression ...]

在存储过程中使用变量,代码如下所示

use schooldb;-- 使用 schooldb 数据库
-- 创建过程
create procedure mypro1()
begin
declare name varchar(20);
set name = '丘处机';
select * from studentinfo where studentname = name;
end;
-- 调用过程
call mypro1();

运行结果

mysql 저장 프로시저의 용도는 무엇입니까?

流程控制语句

if 条件语句

IF 语句包含多个条件判断,根据结果为 TRUEFALSE执行语句,与编程语言中的 ifelse ifelse 语法类似。

定义存储过程,输入一个整数,使用 if 语句判断是正数还是负数,代码如下所示:

-- 创建过程
create procedure mypro2(in num int)
begin
if num<p>运行结果</p><p><img src="https://img.php.cn/upload/article/000/000/024/fe178bfb1a0eb7dd09df67d79c722d95-4.png" alt="mysql 저장 프로시저의 용도는 무엇입니까?"></p><h4>
<a id="case__169"></a><strong>case 条件语句</strong>
</h4><p><code>case</code>是另一个条件判断的语句,类似于编程语言中的 <code>choose</code>、<code>when</code>语法。MySQL 中的 <code>case</code><br><code>mypro</code>는 프로시저 이름을 정의하는 데 사용됩니다. a int, in b int, out sum int)는 프로세스의 매개변수를 의미하며, 여기서 <code>in</code>은 입력 매개변수를 나타내고 <code>out</code>은 출력 매개변수를 나타냅니다. Java에서 메소드를 정의할 때 형식 매개변수 및 반환 값과 유사합니다. </p><p><code>begin</code> 및 <code>end</code>는 프로세스 본문의 시작과 끝을 나타냅니다. Java에서 메소드를 정의할 때 중괄호를 사용합니다. </p><p><code>call</code>은 프로시저를 호출하는 데 사용되며, <code>@s</code>는 프로세스 출력 매개변수를 수신하는 데 사용되는 변수</p><p><img src="https://img.php.cn/upload/article/000/000/024/fcb90e661eadc288d2d1d57364b7978a-5.png" alt="mysql 저장 프로시저의 용도는 무엇입니까?"><a id="_70"></a></p><p>저장 프로시저 매개변수 </p><p></p><blockquote>MySQL 저장 프로시저 매개변수는 저장 프로시저 정의에 사용됩니다. 세 가지 매개변수 유형이 있습니다. 🎜</blockquote>🎜🎜<code>IN</code> 입력 매개변수: 호출자가 프로시저에 전달함을 나타냅니다. 값(수신 값은 리터럴 또는 변수일 수 있음) 🎜🎜<code>OUT</code> 출력 매개변수: 프로세스가 호출자에게 값을 전달함을 나타냅니다. 여러 값을 반환함) (나가는 값은 변수만 가능함) ;🎜🎜<code>INOUT</code>입력 및 출력 매개변수: 호출자가 프로세스에 값을 전달한다는 의미이며, 프로세스가 값을 전달한다는 의미입니다. 호출자에게 값을 전달합니다(값은 변수만 가능). 🎜🎜🎜저장된 프로시저는 매개변수를 기준으로 4가지 범주로 나눌 수 있습니다: 🎜🎜1) 입력 매개변수만 있는 프로시저 🎜🎜4) .입력 및 출력 매개변수가 포함된 프로시저입니다. 🎜🎜<a id="_88">🎜🎜Variables🎜🎜🎜MySQL의 저장 프로시저는 Java의 메서드와 유사합니다. 🎜🎜이 경우 저장 프로시저에서도 변수를 사용할 수 있습니다. Java의 지역 변수 범위는 변수가 위치한 메서드인 반면, MySQL의 지역 변수 범위는 해당 변수가 위치한 저장 프로시저입니다. 🎜🎜</a><a id="_94">🎜🎜변수 정의🎜🎜<pre class="brush:php;toolbar:false">-- 创建过程
create procedure mypro3(in num int)
begin
case -- 条件开始
when num🎜🎜🎜<code>declare</code>는 변수를 선언하는 데 사용됩니다. 🎜🎜🎜🎜<code>variable_name</code>은 변수 이름을 나타냅니다. 🎜 🎜🎜🎜<code>datatype</code>은 MySQL의 데이터 유형입니다. 🎜🎜🎜🎜<code>default</code>는 기본값을 선언하는 데 사용됩니다. 예: 🎜<pre class="brush:php;toolbar:false">-- 创建过程
create procedure mypro4(in num int)
begin
case num -- 条件开始
when 1 then select '数值是 1';
when 2 then select '数值是 2';
else select '不是 1 也不是 2';
end case; -- 条件结束
end;
-- 调用过程
call mypro4(3);
🎜🎜 🎜🎜🎜변수 할당🎜🎜
-- 创建过程
create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num🎜저장 프로시저에서 변수를 사용하며, 코드는 다음과 같습니다🎜<pre class="brush:php;toolbar:false">-- 创建过程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循环开始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循环结束
end;
-- 调用过程
call mypro6(@sum);
-- 查询变量值
select @sum;
🎜실행 결과🎜🎜mysql 저장 프로시저의 용도는 무엇입니까?🎜🎜
🎜🎜흐름 제어문🎜🎜

🎜if 조건문 🎜 h4>🎜 IF 문에는 여러 조건부 판단이 포함되어 있습니다. 이 문은 TRUE, FALSE의 결과를 기반으로 실행됩니다. 프로그래밍 언어의 if와 유사합니다. >, else if, else는 유사한 구문을 갖습니다. 🎜🎜저장 프로시저를 정의하고 정수를 입력한 후 if 문을 사용하여 양수인지 음수인지 확인합니다. 코드는 다음과 같습니다. 🎜
-- 创建过程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循环开始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循环结束
end;
-- 调用过程
call mypro7(@sum);
-- 查询变量值
select @sum;
🎜실행 결과🎜🎜mysql 저장 프로시저의 용도는 무엇입니까?🎜

🎜🎜case 조건문🎜 h4>🎜case code>는 프로그래밍 언어의 <code>choosewhen 구문과 유사한 또 다른 조건문입니다. MySQL의 case 문에는 두 가지 구문 🎜 형식이 있습니다. 🎜🎜저장 프로시저를 정의하고 정수를 입력한 후 Case 문을 사용하여 양수인지 음수인지 확인합니다. 코드는 다음과 같습니다. 🎜
SHOW PROCEDURE STATUS;
🎜Run results🎜🎜🎜🎜🎜저장 프로시저를 정의하고 정수로 하고, Case 문을 사용하여 1인지 2인지 확인합니다. 코드는 다음과 같습니다. 🎜
SHOW PROCEDURE status where db = 'schooldb';
🎜Running result🎜

mysql 저장 프로시저의 용도는 무엇입니까?

两种 case 语法都可以实现条件判断,但第一种适合范围值判断,而第二种适合确定值判断。

while 循环语句

while语句的用法和 java中的 while循环类似。

定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:

-- 创建过程
create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num<p>运行结果</p><p><img src="https://img.php.cn/upload/article/000/000/024/fcb90e661eadc288d2d1d57364b7978a-7.png" alt="mysql 저장 프로시저의 용도는 무엇입니까?"></p><h4>
<a id="repeat__243"></a><strong>repeat 循环语句</strong>
</h4><p><code>repeat</code>语句的用法和 <code>java</code>中的 <code>do…while</code> 语句类似,都是先执行循环操作,再判断条件,区别是 <code>repeat</code>表达<br> 式值为 <code>false</code>时才执行循环操作,直到表达式值为 <code>true</code>停止。</p><p>定义存储过程,使用 repeat 循环输出 1 到 10 的累加和,代码如下所示:</p><pre class="brush:php;toolbar:false">-- 创建过程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循环开始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循环结束
end;
-- 调用过程
call mypro6(@sum);
-- 查询变量值
select @sum;

运行结果

mysql 저장 프로시저의 용도는 무엇입니까?

loop 循环语句

循环语句,用来重复执行某些语句。

执行过程中可使用 leave语句或 iterate 跳出循环,也可以嵌套 IF等判断语句。

  • leave语句效果相当于 java 中的 break,用来终止循环;
  • iterate语句效果相当于 java 中的 continue,用来结束本次循环操作,进入下一次循环。

定义存储过程,使用 loop 循环输出 1 到 10 的累加和,代码如下所示:

-- 创建过程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循环开始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循环结束
end;
-- 调用过程
call mypro7(@sum);
-- 查询变量值
select @sum;

运行结果

mysql 저장 프로시저의 용도는 무엇입니까?

代码中的 loop_sum 相当于给循环贴个标签,方便多重循环时灵活操作。

存储过程的管理

存储过程的管理主要包括:显示过程、显示过程源码、删除过程。

比较简单的方式就是利用 navicat 客户端工具进行管理,鼠标点击操作即可,如下图所示:

mysql 저장 프로시저의 용도는 무엇입니까?

显示存储过程

SHOW PROCEDURE STATUS;

显示特定数据库的存储过程

SHOW PROCEDURE status where db = 'schooldb';

显示特定模式的存储过程,要求显示名称中包含“my”的存储过程

SHOW PROCEDURE status where name like '%my%';

显示存储过程“mypro1”的源码

SHOW CREATE PROCEDURE mypro1;

mysql 저장 프로시저의 용도는 무엇입니까?

删除存储过程“mypro1”

drop PROCEDURE mypro1;

【相关推荐:mysql视频教程

위 내용은 mysql 저장 프로시저의 용도는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.