MySQL存储过程

这里写目录标题

    • 一、存储过程的概述:
      • 1.概述:
      • 2.简介:
      • 3.存储过程的优点:
    • 二、存储过程的使用:
      • 1.语法:
      • 2.示例:
      • 3.存储过程的参数:
      • 4.修改存储过程:
      • 5.删除存储过程:
    • 三、总结:
      • 1.提高性能和安全性:
      • 2.代码可重用性高:
      • 3.降低耦合度:
      • 4.更好的错误处理和事务控制:

一、存储过程的概述:

1.概述:

前面学习的 MySQL 相关知识都是针对一个表或几个表的单条 SQL 语句,使用这样的SQL 语句虽然可以完成用户的需求,但在实际的数据库应用中,有些数据库操作可能会非常复杂,可能会需要多条 SQL 语句一起去处理才能够完成,这时候就可以使用存储过程, 轻松而高效的去完成这个需求,有点类似shell脚本里的函数

2.简介:

(1)存储过程是一组为了完成特定功能的SQL语句集合。 两个点 第一 触发器(定时任务) 第二个判断
(2)存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。操作数据库的传统 SQL 语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高

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

3.存储过程的优点:

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

二、存储过程的使用:

1.语法:

CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体> [过程参数[,…] ] 

2.示例:

(1)创建存储过程:

use exo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> delimiter @@  #将语句的结束符号从分号;临时改为两个@@(可以自定义)
mysql> create procedure proc ()  #创建存储过程,过程名为proc,不带参数
    -> begin      #过程体以关键字 BEGIN 开始
    -> create table kai(id int(10),name char(10),score int(10));  
    -> insert into kai values(1,'wang',13);
    -> select * from kai;
    -> end @@        #过程体以关键字 END 结束
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;   #将语句的结束符号恢复为分号

(2)调用存储过程:

mysql> call proc ();
+------+------+-------+
| id   | name | score |
+------+------+-------+
|    1 | wang |    13 |
+------+------+-------+
1 row in set (0.01 sec)

Query OK, 0 rows affected (0.01 sec)

1.存储过程的主体都分,被称为过程体
2.以BEGIN开始,以END结束,若只有一条sQL语句,则可以省略BEGIN-END
3.以DELIMITER开始和结束
delimiter 是用户自定义的结束符
省略存储过程其他步骤
mysql>delimiter ; 分号前有空格

(3)查看存储过程:

格式:

SHOW CREATE PROCEDURE [数据库.]存储过程名;		#查看某个存储过程的具体信息
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 kai(id int(10),name char(10),score int(10));
insert into kai values(1,'wang',13);
select * from kai;
end
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: utf8_general_ci
1 row in set (0.00 sec)

3.存储过程的参数:

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

  • 示例:
delimiter @@
mysql> create procedure proc1 (in inname varchar(40))     #行参
    -> begin
    -> select * from info where name=inname;
    -> end @@
mysql> delimiter ;		
call proc1('billkin');
+------+---------+-------+----------+--------+------+
| id   | name    | score | address  | hobbid | addr |
+------+---------+-------+----------+--------+------+
|    3 | billkin | 60.00 | shanghai |      4 | chen |
+------+---------+-------+----------+--------+------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

4.修改存储过程:

ALTER PROCEDURE <过程名>[<特征>... ]
ALTER PROCEDURE GetRole MODIFIES SQL DATA SQL SECURITY INVOKER;
MODIFIES sQLDATA:表明子程序包含写数据的语句
SECURITY:安全等级
invoker:当定义为INVOKER时,只要执行者有执行权限,就可以成功执行。

5.删除存储过程:

(1)概念:存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。

(2)语法:

DROP PROCEDURE IF EXISTS Proc;
drop procedure if exists proc;
Query OK, 0 rows affected (0.01 sec)

mysql> drop procedure if exists proc1;
Query OK, 0 rows affected (0.00 sec)

三、总结:

存储过程的作用有以下几个方面:

1.提高性能和安全性:

MySQL 存储过程封装了常见的业务逻辑和数据处理逻辑,能够减少客户端和服务器之间的通信量和频率,从而提高了应用程序的性能,并减少了对网络连接的依赖。同时,MySQL 存储过程还可以在服务器端执行操作,保护敏感数据,提高数据库的安全性。

2.代码可重用性高:

可以在存储过程中编写相对独立的代码单元,并将其保存到 MySQL 数据库中,这些代码单元可以供多个应用程序或客户端调用,从而提高了代码的重用性,减少了代码的冗余,简化了应用程序的开发和维护。

3.降低耦合度:

将业务逻辑和数据处理逻辑封装到存储过程中,使得应用程序和数据库之间的耦合度更低,使得程序更加易于扩展和维护。

4.更好的错误处理和事务控制:

存储过程可以更加方便的实现错误处理和事务控制,避免了在应用程序中处理复杂的错误情况和事务回滚操作。在存储过程中可以编写相应的错误处理程序,减轻了程序开发工作量。

综上所述,MySQL 存储过程在提高性能、提高数据安全性、代码重用性、降低耦合度等方面具有重要意义,是 MySQL 数据库管理中的一项重要技术

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