【简单认识MySQL存储过程】

文章目录

  • 一、简介
    • 1、概述
    • 2、存储过程中的控制结构及应用场景
    • 3、存储过程的优点
    • 4、语法
  • 二、示例
    • 1、创建存储过程
    • 2、查看存储过程
    • 3、 修改存储过程
    • 4、删除存储过程


一、简介

1、概述

存储过程在使用过程中是将常用或者复杂的工作预先使用sql语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统sql速度更快、执行效率更高。

2、存储过程中的控制结构及应用场景

存储过程在数据库中 创建并保存,它不仅仅是SQ语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访问方式。存储过程的应用范围很广例如封装特定的功能、 在不同的应用程序或平台上执行相同的函数等等。

3、存储过程的优点

执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率;
SQL语句加上控制语句的集合,灵活性高;
在服务器端存储,客户端调用时,降低网络负载;
可多次重复被调用,可随时修改,不影响客户端调用;
可完成所有的数据库操作,也可控制数据库的信息访问权限。

4、语法

CREATE PROCEDURE <过程名> ([过程参数[,…] ]<过程体>
[过程参数[,…] ] 格式
<过程名>: 尽量避免与内置的函数或字段重名
<过程体>: 语句
[ IN I OUT I INOUT ]<参数名><类型>

二、示例

1、创建存储过程

#将语句的结束符从分号;临时改为两个$$(可自定义)
mysql> delimiter $$
#创建存储过程,过程名为proc,不带参数
mysql> create procedure proc()
#以关键字begin开始
    -> begin
#存储过程中有哪些参数
    -> create table xx (id int (10), name char(10),score int (10));  
#插入数据
    -> insert into xx values (1,'hmbb',18);
#过程体语句
    -> select * from xx; 
#过程体以关键字end结束
    -> end $$
Query OK, 0 rows affected (0.02 sec)
#讲语句的结束符号恢复为分号
delimiter ;

2、查看存储过程

mysql>  show create procedure proc\G
*************************** 1. row ***************************
           Procedure: proc
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE DEFINER="root"@"localhost" PROCEDURE "proc"()
begin
create table xx (id int (10), name char(10),score int (10));  
insert into xx values (1,'hmbb',18); 
select * from xx; 
end
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

#查看指定存储过程信息
mysql> SHOW PROCEDURE STATUS like '%proc%'\G
*************************** 1. row ***************************
                  Db: class
                Name: proc
                Type: PROCEDURE
             Definer: root@localhost
            Modified: 2023-07-20 14:56:12
             Created: 2023-07-20 14:56:12
       Security_type: DEFINER
             Comment: 
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

3、 修改存储过程

格式

ALTER PROCEDURE <过程名>[<特征>... ]
#示例
ALTER PROCEDURE GetRole MODIFIES SQL DATA SQL SECURITY INVOKER;

4、删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。EXISTS检验存不存在

DROP PROCEDURE IF EXISTS Proc;

你可能感兴趣的:(mysql,数据库)