存储过程

含义: 一组预先编译好的SQL语句的集合,可理解成批处理语句,类似于JAVA中的方法。
使用时直接调用名字就可以

好处: 1. 提高代码的重用性;2.简化操作;3.减少了编译次数,并且减少了和数据库服务器的连接次数,提高了效率。

语法

一、创建和调用

## 一)创建语法
create Procedure 存储过程名(参数列表)
Begin 
	 存储过程体(一组合法的SQL语句)
End
## 二)调用语法
call 存储过程名(实参列表);

注意:

  1. 参数列表包含三部分: 参数模式+参数名+参数类型
in stuname VARCHAR(20)

其中参数模式:

  • IN: 该参数可作为输入。 即该参数需要调用方传入值
  • OUT : 该参数可作为输出,该参数可以作为返回值
  • INOUT:该参数可作为输出,也可以作为输出; 即该参数既需要传入值,又可以返回值
  1. 如果存储过程体仅仅只有一句话,BEGIN END可以省略。
  2. 存储过程体中的每条SQL语句结尾要修必须加分号。
    存储过程体的结尾可以使用DELIMITER 重新设置。
    语法:DELIMITER 结束标记 比如, DELIMITER $

1. 空参的存储过程

终端里面下面输入代码。

#创建
DELIMITER $
create PROCEDURE myp1()
BEGIN 
insert into 学生表(姓名,学号) 
VALUES(A,004),(b,004),(,004);
END $

#调用
CAll  myp1()$

注意!DELIMITER $生效后,语句结尾要使用 $ 而不是分号;

完成后可以在函数这里看到myp1

mysql 存储过程日志输出 mysql 存储过程 输出_SQL

2. 创建带in模式参数的存储过程

例子:输入课程名字,查询对应的教师信息

#创建
# DELIMITER $ 开头写过就不用再写一次了
create PROCEDURE myp2(in c_name VARCHAR(20))
BEGIN 
		select t.*
		from teacher t
		right join course c on t.t_id=c.t_id
		where c.c_name=c_name;
END $

#调用
CAll  myp2('这里输入对应的值')$

mysql 存储过程日志输出 mysql 存储过程 输出_JAVA_02

3. 创建带out模式参数的存储过程

例子:输入课程名字,返回对应的教师名字

#创建
# DELIMITER $
create PROCEDURE myp3(in c_name VARCHAR(20),out t_name VARCHAR(20))
BEGIN 
		select t.t_name into t_name #使用into赋值
		from teacher t
		right join course c on t.t_id=c.t_id
		where c.c_name=c_name;
END $

#调用
CAll  myp3('语文',@tname)$ 
select @tname$

结果展示:

mysql 存储过程日志输出 mysql 存储过程 输出_JAVA_03

mysql 存储过程日志输出 mysql 存储过程 输出_mysql 存储过程日志输出_04

4. 创建带inout模式参数的存储过程

传入a,b两个值,最后两个值翻倍返回

#创建
# DELIMITER $
create PROCEDURE myp4(inout a int, inout b int)
BEGIN 
		set a=a*2
		set b=b*2;
END $

#调用
set @m=10$
set @n=20$
CAll  myp4(@m,@n)$ 
select @m,@n$

二、删除语法

drop procedures 存储过程名;

注意只能一次删除一个

三、查看

show create procedure 存储过程名;

mysql 存储过程日志输出 mysql 存储过程 输出_JAVA_05

四、修改

存储过程里的逻辑语句不能修改