1. 存储过程基本用法
1.1 概念
- 存储过程,也叫做存储程序,是一条或者多条SQL语句的集合,可以视为批量处理,但是其作用不仅仅局限于批量处理。
- 其中针对存储过程也有多种操作:如何创建存储过程,以及如何调用、查看、修改、删除存储过程。存储过程也可以调用其他存储过程。(类似于Java函数之间的相互调用)
- 存储过程和函数是:事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据库和应用之间的传输,对于提高数据处理的效率是非常有好处的。
函数:是一个有返回值的过程;过程:是一个没有返回值的函数
存储过程和自定义函数的区别:
- 存储过程实现的功能要复杂一些;而函数的针对性更强。
- 存储过程可以返回多个值;函数只能有一个返回值。
- 存储过程一般独立的来执行;而函数可以作为其他SQL语句的组成部分实现出来。
1.2 创建存储过程
1.2.1 语法格式
# 这个地方其实是用来声明SQL语句的结束符号的
delimiter //
# 这个地方此时真正的用来创建一个存储过程的
create procedure 存储过程名称(参数列表)
begin
-- sql语句
end//
# 当创建完一个存储过程之后再将分隔符替换为分号,为了不影响其他的操作
delimiter ;
2.2.2 语法介绍
- delimiter : 用于设置sql语句分割符,默认为分号。因为在MySQL中每一条SQL语句都必须以 ;进行结束,当我们换行的时候就会执行这条SQL语句,但是我们此时的存储过程并没有结束,就会造成直接执行没有写完的存储过程造成报错,所以此时需要声明其他的结束符,不让其使用默认的分隔符结束SQL语句。
- sql语句 :在这个部分编写sql语句,编写的语句需要以分号结尾,此时回车会直接执行,所以要创建存储过程前需要指定其他符号作为分割符,此时使用 // , 也可以使用其它字符。
- // : 声明结束符号,这个符号可以是任意的,是自定义的。相当于就是把 分号替换为 //
创建存储过程查询学生信息
# 将SQL语句的结束符号分隔符替换为//
delimiter //
create procedure proc_stu()
begin
select * from students; # 此时这个分号并不会结束这个语句,存储过程中的SQL语句还是用分隔符进行分隔
end // # 这里使用这个结束符号代表这个存储过程创建完成
delimiter; # 创建完一个存储过程之后将结束符号替换为分号,防止进行其他操作的时候有问题
1.3 调用存储过程
语法格式:
call proc_stu(); # 调用的时候需要加上括号,因为可能存在参数
1.4 查看存储过程
语法格式:
# 查询 studnet 数据库中的所有的存储过程
select name from mysql.proc where db='studnet';
# 查询存储过程的状态信息
show procedure status;
1.5 删除存储过程
语法格式:
drop procedure proc_stu; # 删除的时候不要加小括号,直接给定存储过程的名字即可。
drop procedure if exists proc_stu; # 如果存储删除,不存在不删除并且不会报错