首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
11.1 索引概述
11.1.1 MySQL索引概述
11.1.2 MySQL索引分类
11.2 创建索引
11.2.1 在建立数据表时创建索引
11.2.2 在已建立的数据表中创建索引
11.2.3 修改数据表结构以为数据表添加索引
11.3 删除索引
12.1 视图概述
12.1.1 视图的概念
12.1.2 视图的作用
12.2 创建视图
12.2.1 查看创建视图的权限
12.2.2 创建视图
12.2.3 创建视图的注意事项
12.3 视图操作
12.3.1 查看视图
12.3.2 修改视图
12.3.3 更新视图
12.3.4 删除视图
第13章 数据完整性约束
13.1 定义完整性约束
13.1.1 实体完整性
13.1.2 参照完整性
13.1.3 用户定义完整性
13.2 命名完整性约束
13.3 更新完整性约束
13.3.1 删除完整性约束
13.3.2 修改完整性约束
第14章 存储过程与存储函数
14.1 创建存储过程和存储函数
14.1.1 创建存储过程
14.1.2 创建存储函数
14.1.3 变量的应用
14.1.4 光标的应用
14.2 调用存储过程和存储函数
14.2.1 调用存储过程
14.2.2 调用存储函数
14.3 查看存储过程和存储函数
14.3.1 SHOW STATUS语句
14.3.2 SHOW CREATE语句
14.4 修改存储过程和存储函数
14.5 删除存储过程和存储函数
15.1 MySQL触发器
15.1.1 创建MySQL触发器
15.1.2 创建具有多条执行语句的触发器
15.2 查看触发器
15.2.1 SHOW TRIGGERS语句
15.2.2 查看triggers表中触发器信息
15.3 使用触发器
15.3.1 触发器的执行顺序
15.3.2 使用触发器维护冗余数据
15.4 删除触发器
第16章 事务
16.1 事务机制
16.1.1 事务的概念
16.1.2 事务机制的必要性
16.1.3 关闭MySQL自动提交
16.1.4 事务回滚
16.1.5 事务提交
16.1.6 MySQL中的事务
16.1.7 回退点
16.2 锁机制
16.2.1 MySQL锁机制的基本知识
16.2.2 MyISAM表的表级锁
16.2.3 InnoDB表的行级锁
16.2.4 死锁的概念与避免
16.3 事务的隔离级别
16.3.1 事务的隔离级别与并发问题
16.3.2 设置事务的隔离级别
当前位置:
首页>>
技术小册>>
MySQL从入门到精通(四)
小册名称:MySQL从入门到精通(四)
### 14.1.1 创建存储过程 在MySQL数据库中,存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,它经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果有)来调用执行它。存储过程的使用可以极大地提高数据库操作的灵活性和效率,特别是在处理复杂逻辑和大量数据操作时。本章将详细介绍如何在MySQL中创建存储过程,包括基本语法、参数使用、流程控制语句以及存储过程的调用与管理。 #### 14.1.1.1 存储过程的基本语法 MySQL中创建存储过程的基本语法如下: ```sql CREATE PROCEDURE procedure_name ([proc_parameter[,...]]) [characteristic ...] routine_body ``` - **procedure_name**:存储过程的名称,在数据库中必须唯一。 - **proc_parameter**:存储过程的参数列表,格式为`[IN | OUT | INOUT] param_name type`。其中,`IN`表示输入参数,`OUT`表示输出参数,`INOUT`表示既可以输入也可以输出的参数。`param_name`是参数名,`type`是参数类型。 - **characteristic**:存储过程的特性,如`LANGUAGE SQL`(指定存储过程的语言为SQL)、`DETERMINISTIC`(表示存储过程对同样的输入总是产生相同的结果)、`NOT DETERMINISTIC`(表示存储过程的结果可能因其他因素而变化)等。 - **routine_body**:存储过程的主体,包含了一系列的SQL语句,用于实现特定的功能。 #### 14.1.1.2 创建简单的存储过程 下面是一个简单的存储过程示例,该过程不接受任何参数,用于查询并返回`employees`表中所有员工的名字和部门ID: ```sql DELIMITER // CREATE PROCEDURE GetAllEmployees() BEGIN SELECT name, department_id FROM employees; END // DELIMITER ; ``` 注意,在创建存储过程之前,我们使用`DELIMITER //`更改了命令的结束符,以便在存储过程内部可以使用分号(`;`)作为SQL语句的结束符,而不会导致整个`CREATE PROCEDURE`语句提前结束。存储过程定义完成后,我们再通过`DELIMITER ;`将命令结束符改回分号。 #### 14.1.1.3 带参数的存储过程 接下来,我们创建一个带有输入参数的存储过程,用于查询指定部门ID下的所有员工信息: ```sql DELIMITER // CREATE PROCEDURE GetEmployeesByDepartment(IN dept_id INT) BEGIN SELECT name, position, salary FROM employees WHERE department_id = dept_id; END // DELIMITER ; ``` 在这个例子中,`dept_id`是一个输入参数,用于指定要查询的部门ID。 #### 14.1.1.4 使用输出参数的存储过程 输出参数允许存储过程将值返回给调用者。以下是一个示例,该存储过程计算并返回指定部门中员工的平均工资: ```sql DELIMITER // CREATE PROCEDURE GetAverageSalaryByDepartment(IN dept_id INT, OUT avg_salary DECIMAL(10,2)) BEGIN SELECT AVG(salary) INTO avg_salary FROM employees WHERE department_id = dept_id; END // DELIMITER ; ``` 调用此存储过程并获取结果的方式略有不同,因为它需要处理输出参数: ```sql CALL GetAverageSalaryByDepartment(5, @salary); SELECT @salary; ``` 这里,`@salary`是一个用户定义的变量,用于接收存储过程的输出参数`avg_salary`的值。 #### 14.1.1.5 流程控制语句 存储过程中可以使用多种流程控制语句,如IF、CASE、LOOP、REPEAT、WHILE等,以实现复杂的逻辑处理。以下是一个使用IF语句的存储过程示例,它根据员工的薪资水平给出薪资评价: ```sql DELIMITER // CREATE PROCEDURE EvaluateSalary(IN emp_salary DECIMAL(10,2), OUT salary_grade VARCHAR(50)) BEGIN IF emp_salary < 3000 THEN SET salary_grade = 'Low'; ELSEIF emp_salary BETWEEN 3000 AND 7000 THEN SET salary_grade = 'Medium'; ELSE SET salary_grade = 'High'; END IF; END // DELIMITER ; ``` #### 14.1.1.6 存储过程的调用与管理 存储过程创建后,可以通过`CALL`语句进行调用。除了之前示例中的调用方式外,还可以传递变量作为参数。此外,MySQL还提供了多种管理和维护存储过程的命令,如`SHOW PROCEDURE STATUS`用于查看存储过程的状态信息,`DROP PROCEDURE`用于删除存储过程等。 #### 总结 通过本章的学习,您应该已经掌握了MySQL中存储过程的基本创建方法,包括如何定义参数、编写存储过程体、使用流程控制语句以及存储过程的调用与管理。存储过程是数据库编程中非常重要的一个概念,它能够提高数据库操作的效率,简化复杂逻辑的处理。在实际应用中,合理设计和使用存储过程将大大提高数据库应用的性能和可维护性。希望本章的内容能为您的MySQL学习和应用之路提供帮助。
上一篇:
14.1 创建存储过程和存储函数
下一篇:
14.1.2 创建存储函数
该分类下的相关小册推荐:
MySQL8.0入门与实践
MySQL从入门到精通(三)
MySQL必会核心问题
MySQL 实战 45 讲
细说MySQL(零基础到高级应用)
MySQL从入门到精通(一)
MySQL从入门到精通(五)
MySQL从入门到精通(二)
SQL零基础到熟练应用(增删改查)