MySQL存储过程

文章目录

  • MySQL存储过程
  • 一.MySQL存储过程
    • 1.概述
    • 2.简介
    • 3.存储过程中的控制结构及应用场景
    • 4.存储过程的优点
    • 5.存储过程语法
    • 6.不带参数创建(示例)
      • 6.1 创建存储过程
      • 6.2 调用存储过程
      • 6.3 查看存储过程
      • 6.4 存储过程的参数
    • 7.实例
    • 8.修改存储过程
    • 9.删除存储过程
    • mysql 优化

MySQL存储过程

一.MySQL存储过程

1.概述

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

2.简介

(1)存储过程是一组为了完成特定功能的SQL语句集合。

(2)存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。

(3)存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。

(4)当需要使用该存储过程时,只需要调用它即可。操作数据库的传统 SQL语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高。

3.存储过程中的控制结构及应用场景

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

4.存储过程的优点

(1)执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率

(2)SQL语句加上控制语句的集合,灵活性高

(3)在服务器端存储,客户端调用时,降低网络负载

(4)可多次重复被调用,可随时修改,不影响客户端调用

(5)可完成所有的数据库操作,也可控制数据库的信息访问权限

5.存储过程语法

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

[过程参数[,…] ] 格式

<过程名>: 尽量避免与内置的函数或字段重名

<过程体>: 语句

[ IN I OUT I INOUT ]<参数名><类型>

6.不带参数创建(示例)

6.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 ;

6.2 调用存储过程

call proc();

存储过程的主体都分,被称为过程体

以BEGIN开始,以END结束,若只有一条sQL语句,则可以省略BEGIN-END

以DELIMITER开始和结束

#$$是用户自定义的结束符
mysql> delimiter $$
#分号前有空格
mysql>DELIMITER ;  

6.3 查看存储过程

(1)格式

#查看某个存储过程的具体信息
SHOW CREATE PROCEDURE [数据库.]存储过程名;	

(2)示例

mysql>  show create procedure proc\G
*************************** 1. row ***************************Procedure: procsql_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_SUBSTITUTIONCreate 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_ciDatabase Collation: utf8_general_ci
1 row in set (0.00 sec)
#查看存储过程
SHOW PROCEDURE STATUS 
#查看指定存储过程信息
mysql> SHOW PROCEDURE STATUS like '%proc%'\G
*************************** 1. row ***************************Db: className: procType: PROCEDUREDefiner: root@localhostModified: 2023-07-20 14:56:12Created: 2023-07-20 14:56:12Security_type: DEFINERComment: 
character_set_client: utf8
collation_connection: utf8_general_ciDatabase Collation: utf8_general_ci
1 row in set (0.00 sec)

6.4 存储过程的参数

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

7.实例

mysql> delimiter @@
mysql> create procedure proc2 (in inname varchar(40))-> begin-> select * from info where name=inname;-> end @@
Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;
mysql> call proc2('wangwu');
+------+--------+--------+------------+--------+------+
| id   | name   | score  | address    | hobbid | addr |
+------+--------+--------+------------+--------+------+
|    2 | wangwu | 120.00 | shengzheng |      2 |      |
+------+--------+--------+------------+--------+------+
1 row in set (0.00 sec)Query OK, 0 rows affected (0.00 sec)

8.修改存储过程

(1)格式

ALTER PROCEDURE <过程名>[<特征>... ]

(2)示例

ALTER PROCEDURE GetRole MODIFIES SQL DATA SQL SECURITY INVOKER;

MODIFIES SQLDATA:表明子程序包含写数据的语句
SECURITY:安全等级
invoker:当定义为INVOKER时,只要执行者有执行权限,就可以成功执行。

9.删除存储过程

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

DROP PROCEDURE IF EXISTS Proc;

mysql 优化

MySQL 的性能优化可以从以下几个方面入手:

(1)数据库的逻辑设计

  • 合理的表结构设计,包括表之间的关系和索引设计等
  • 避免使用不必要的关联查询和子查询
  • 避免使用不必要的交叉表查询、全表扫描等操作

(2)系统配置优化

  • 适当增加系统内存、硬盘、CPU 等硬件设施
  • 优化 MySQL 的配置,如应用正确的缓存、调整 MySQL 配置参数等

(3)SQL 查询优化

  • 使用正确的索引,优先使用覆盖索引
  • 尽量避免在 SQL 中使用算法处理或函数操作
  • 通过分析慢查询日志、MySQL Explain 等实现优化。

(4)连接池和缓存的使用

  • 合理设置连接池参数,例如连接池大小、最大连接数
  • 通过缓存技术减少对数据库的访问次数,如使用 Redis 等内存数据库进行缓存

(5)确保 MySQL 的安全稳定

  • 及时进行备份和恢复操作,保证数据的完整性和可靠性
  • 开启 MySQL 的事务管理,确保数据库操作的原子性和一致性
  • 使用安全的 SQL 编写方式,如避免 SQL 注入、拒绝服务攻击、暴力破解等攻击。

需要注意的是,MySQL 的性能优化是一个综合性的工作;不同的业务场景、不同的数据库规模都会有不同的优化方案,具体实现也应根据具体情况来进行调整和优化。调优时应注意造成性能问题的原因,重点突破站在性能问题的源头进行优化调整。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

4 Linux基础篇-目录结构

4 Linux基础篇-目录结构 文章目录 4 Linux基础篇-目录结构4.1 Linux目录结构4.2 具体的目录结构 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能会用到的资料有如下所示&#xff0c;下载链接见文末&#xff1a; 《鸟哥的Linux私房菜 基础学习篇 第四版…

springboot 之以enable开头的注解

Spring​ 有很多 Enable 开头的注解&#xff0c;平时在使用的时候也没有注意过为什么会有这些注解 Enable 注解 首先我们先看一下有哪些常用的 Enable 开头的注解&#xff0c;以及都是干什么用的。 EnableRetry​&#xff1a;开启Spring 的重试功能&#xff1b; EnableSch…

web攻击面试|网络渗透面试(一)

Web攻击面试大纲 常见Web攻击类型 1.1 SQL注入攻击 1.2 XSS攻击 1.3 CSRF攻击 1.4 命令注入攻击SQL注入攻击 2.1 基本概念 2.2 攻击原理 2.3 防御措施XSS攻击 3.1 基本概念 3.2 攻击原理 3.3 防御措施CSRF攻击 4.1 基本概念 4.2 攻击原理 4.3 防御措施命令注入攻击 5.1 基本概…

手机python怎么用海龟画图,python怎么在手机上编程

大家好&#xff0c;给大家分享一下手机python怎么用海龟画图&#xff0c;很多人还不知道这一点。下面详细解释一下。现在让我们来看看&#xff01; 1、如何python手机版创造Al&#xff1f; 如果您想在手机上使用Python来创建AI&#xff08;人工智能&#xff09;程序&#xff0…

Golang并发控制

开发 go 程序的时候&#xff0c;时常需要使用 goroutine 并发处理任务&#xff0c;有时候这些 goroutine 是相互独立的&#xff0c;需要保证并发的数据安全性&#xff0c;也有的时候&#xff0c;goroutine 之间要进行同步与通信&#xff0c;主 goroutine 需要控制它所属的子gor…

nginx怎么做负载均衡

Nginx怎么做负载均衡 Nginx 是一个高性能的开源反向代理服务器&#xff0c;可以用于实现负载均衡。负载均衡指的是将用户请求平均分配给多个服务器&#xff0c;以提高整体系统性能和可靠性。下面是一个详细介绍如何使用 Nginx 实现负载均衡的步骤&#xff1a; 步骤 1&#xf…

Redis7.0版本集群

环境准备 centos 7.5redis-7.0.12.tar.gz 操作步骤 1、采用克隆模式创建三台虚拟机&#xff08;redis-cluster01、redis-cluster02、redis-cluster03&#xff09; 2、上传 redis-7.0.12.tar.gz 文件到 /home 目录下 3、解压文件 4、进入 /home/redis-7.0.12 目录下执行命令 m…

K8S集群创建和管理,以及常用命令

目录 1. 安装 K8s 集群2. 创建 K8s 集群3. 管理 K8s 集群4. 维护 K8s 集群 K8s 集群 (Kubernetes Cluster) 是一个由多个节点组成的容器编排平台&#xff0c;它提供了一种简单、可靠、可扩展的方式来部署、管理和监控容器化应用程序。K8s 集群通常由一个或多个 Master 节点和一…

VB+ACCESS教学管理系统设计与实现

【内容摘要】 本学籍管理系统是采用VISAUL BASIC6.0开发的一个数据库管理系统。本设计说明书主要讲述了VISAUL BASIC6.0的基本功能及设计方法。紧接着以本系统为例,逐一介绍开发本系统系统的步骤:系统分析、系统设计、系统实现、系统维护。在系统分析中先后用数据流图、数据…

pg_archivecleanup清理wal日志

一、 注意事项 pg_archivecleanup代码中仅进行了wal日志文件名的对比&#xff0c;没有实现对WAL日志名及对应生成时间的判断。在WAL日志未被重命名时&#xff0c;时间与日志名顺序名一致&#xff0c;没有问题。一旦WAL日志被重命名&#xff0c;pg_archivecleanup清理就可能清理…

Hadoop 之 Hbase 配置与使用(四)

Hadoop 之 Hbase 配置与使用 一.Hbase 下载1.Hbase 下载 二.Hbase 配置1.单机部署2.伪集群部署&#xff08;基于单机配置&#xff09;3.集群部署1.启动 hadoop 集群2.启动 zookeeper 集群3.启动 hbase 集群4.集群启停脚本 三.测试1.Pom 配置2.Yml 配置3.Hbase 配置类4.Hbase 连…

C#中try catch finally 用法详解

本文详解try catch finally 用法 目录 定义 这些代码块的用法如下:

大数据课程D1——hadoop的初识

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解大数据的概念&#xff1b; ⚪ 了解大数据的部门结构&#xff1b; ⚪ 了解hadoop的定义&#xff1b; ⚪ 了解hadoop的发展史&#xff1b; 一、大数据简介 1. 概述…

STM32 Flash学习(二)

STM32F1的官方固件库操作FLASH的几个常用函数。这些函数和定义分布在源文件stm32f1xx_hal_flash.c/stm32f1xx_hal_flash_ex.c以及头文件stm32f1xx_hal_flash.h/stm32f1xx_hal_flash_ex.h中。 锁定解函数 对FLASH进行写操作前必须先解锁&#xff0c;解锁操作&#xff1a;在FLA…

GB/T 25000.51解读——软件产品的兼容性怎么测?

GB/T 25000.51-2016《软件产品质量要求和测试细则》是申请软件检测CNAS认可一定会用到的一部国家标准。在前面的文章中&#xff0c;我们为大家整体介绍了GB/T 25000.51-2016《软件产品质量要求和测试细则》国家标准的结构和所涵盖的内容以及对软件产品的八大质量特性中的功能性…

GPU压力测试篇- TensorFlow

简介 该文档介绍使用Tensorflow框架&#xff0c;测试 NVIDIA 驱动的常见python 代码。 环境信息 编号 软件 软件版本 备注 01 驱动 470.57.02 02 cuda 版本 11.2 03 cudnn 版本 8.1.1.33 04 tensorflow 2.6 功能测试代码&#xff1a; import tensor…

基于Matlab实现30种电力电子仿真模型(附上完整源码)

本文介绍了如何使用Matlab来实现电力电子仿真模型&#xff0c;并提供了一个简单的代码示例&#xff0c;展示了如何建立一个逆变器的仿真模型并进行仿真分析。 文章目录 1. 引言2. Matlab实现电力电子仿真模型的基本步骤3. 逆变器仿真模型的示例代码4. 结果分析5. 结论6. 30个完…

如何备份与恢复MySQL数据库数据

目录 数据备份的重要性 造成数据丢失的原因 备份的主要目的 日志 数据库备份类型 逻辑备份 完全备份 差异备份 增份&#xff08;增量备份&#xff09; 备份方式比较 三、常见的备份方法 物理冷备 专用备份工具mysqldump 或mysqlhotcopy 启用二进制日志进行增量备份…

第5讲-搭建kubernetes集群

一、minikube ​ minikube 是一个工具&#xff0c; 能让你在本地运行 Kubernetes。 minikube 在你的个人计算机&#xff08;包括 Windows、macOS 和 Linux PC&#xff09;上运行一个一体化&#xff08;all-in-one&#xff09;或多节点的本地 Kubernetes 集群&#xff0c;以便你…

所有docker命令无效,解决办法

目录 ■前言 今天使用docker时&#xff0c;所有命令无效 ■解决办法如下 1.停止docker服务 2.查看状态 3.删除之前的docker相关的文件 4.再次查看状态 5.使用相关命令 &#xff08;好用了&#xff09; 6.重新下载镜像 ■前言 今天使用docker时&#xff0c;所有命令无…