今天为大家带来的是MySQL的存储过程讲解与运用,这篇文章主要是为了带大家存储过程的引用与理解。
存储过程是什么?
存储过程(Stored Procedure)是数据库中一组为了完成特定功能的SQL语句集,这些语句集被编译并保存在数据库中,用户可以通过调用存储过程的名字并传递参数(如果有的话)来执行这些语句集。存储过程允许用户重复使用SQL代码,从而提高应用程序的可维护性和性能。
存储过程的主要特点:
- 封装性:
- 存储过程将一系列SQL语句封装在一起,形成一个独立的模块。
- 调用存储过程时,只需调用其名称并传递必要的参数,无需重复编写SQL代码。
- 重用性:
- 一旦存储过程被创建,它可以在多个应用程序中被重用,减少了代码的冗余。
- 安全性:
- 通过存储过程,可以限制对数据库的直接访问,只允许用户执行特定的操作。
- 存储过程可以包含复杂的逻辑和错误处理机制,提高系统的可靠性。
- 性能优化:
- 存储过程在数据库服务器端执行,减少了客户端和服务器之间的通信开销。
- 数据库系统可以对存储过程进行预编译和优化,提高执行效率。
- 事务处理:
- 存储过程可以包含多个SQL语句,这些语句可以作为一个事务来执行,确保数据的一致性和完整性。
创建和使用存储过程的基本语法:
1.创建存储过程
语法:
-- 创建存储过程
CREATE PROCEDURE 过程名 ([过程参数[,······]])
[特性]
存储过程体
案列:
-- 创建存储过程
CREATE PROCEDURE pro_patient_countPatient()
BEGIN -- 过程体开始
SELECT COUNT(*) FROM patient; --编写sql语句
END -- 过程体结束
注意事项:
- 不同的数据库管理系统(如MySQL、PostgreSQL、Oracle、SQL Server等)在存储过程的语法和功能上可能存在差异。
- 存储过程应谨慎设计,避免复杂度和依赖性的增加,以免难以维护。
- 在调试和测试存储过程时,应确保其逻辑正确,并处理可能的异常情况。
通过合理使用存储过程,可以显著提高数据库应用程序的开发效率和运行性能。
2.调用存储过程
在创建好了存储过程后,要如何进行调用呢?
在MySQL中使用CALL关键字调用存储过程,语法非常简单,语法格式如下:
CALL 存储过程名(参数列表);
案列如下:
-- 创建存储过程
CREATE PROCEDURE pro_patient_countPatient()
BEGIN -- 过程体开始
SELECT COUNT(*) FROM patient; --编写sql语句
END -- 过程体结束
CALL pro_patient_countPatient();
3.存储过程中的变量
存储过程中的变量是什么?
在MySQL存储过程中,变量是用于存储数据以便在存储过程的执行过程中进行引用和操作的元素。MySQL存储过程中的变量主要分为三种类型:系统变量、用户自定义变量和局部变量。
1. 系统变量
系统变量是由MySQL服务器提供的,不是用户定义的,它们属于服务器层面。系统变量分为全局变量(GLOBAL)和会话变量(SESSION)两种。
- 全局变量:全局变量对整个MySQL服务器实例有效,所有会话都可以访问和修改(但需要相应的权限)。服务器每次启动时,都会为所有的全局变量赋予初始值。全局变量的作用域是服务器级别的,但不能跨重启,即服务器重启后,之前设置的全局变量值会失效。
- 会话变量:会话变量仅对当前会话(连接)有效,其他会话无法访问或修改。会话变量的作用域是会话级别的,当会话结束时,会话变量也会失效。
2. 用户自定义变量
用户自定义变量是用户根据需要自己定义的变量,它们的作用域为当前连接(会话)。用户自定义变量无需提前声明,在使用时直接在变量名前加上“@”字符即可。用户自定义变量可以在存储过程、触发器、事件以及普通的SQL查询中使用。
3. 局部变量
局部变量是在存储过程或函数内部定义的变量,它们的作用域仅限于定义它们的BEGIN...END块内。局部变量在访问之前需要用DECLARE语句进行声明,并可以指定变量的类型和默认值(如果有的话)。局部变量的命名不能与存储过程或函数的参数名相同。
变量的使用
- 赋值:对于系统变量和用户自定义变量,可以使用SET语句或SELECT...INTO语句进行赋值。对于局部变量,只能在声明时指定默认值或在存储过程的执行过程中使用SET语句进行赋值。
- 引用:在存储过程中,可以通过变量名来引用变量的值。对于用户自定义变量和局部变量,需要在变量名前加上“@”字符(仅用户自定义变量)或直接使用变量名(局部变量和会话变量,但在会话变量前通常也加上“@@”以区分全局变量)。
注意事项
- 在使用变量时,要确保变量的作用域和生命周期与存储过程的执行流程相匹配。
- 要避免变量名的冲突,特别是当在存储过程中使用多个变量时。
- 对于系统变量,特别是全局变量,要谨慎修改,因为它们会影响整个MySQL服务器实例的行为。
语法:
DECLARE 变量名[,变量名······] 数据类型 [DEFAULT 值];
案例:
DECLARE trade_time date DEFAULT '2020-07-10'; -- DECLARE 声明变量 -- DEFAULT 默认
声明变量后,可以给变量赋值。语法如下:
SET 变量名 = 表达式值 [, 变量名=表达式...];
案列:
SET total=100;
标签:语句,存储,变量,自定义,第一篇,--,过程
From: https://blog.csdn.net/2401_88512872/article/details/143587930