MYSQL的存储过程

存储过程

存储过程是事先经过编译并存储在数据库中的一段 SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用
  1. 封装,复用, 可以把某一业务SQL封装在存储过程中,需要用到的时候直接调用即可。
  2. 可以接收参数,也可以返回数据再存储过程中,可以传递参数,也可以接收返回值。
  3. 减少网络交互,效率提升如果涉及到多条SQL,每执行一次都是一次网络传输。 而如果封装在存储过程中,我们只需要网络交互一次可能就可以了。

基本语法

创建

CREATE PROCEDURE 存储过程名称 ([ 参数列表 ])
BEGIN
-- SQL 语句
END ;
-- 创建

DELIMITER $  #将语句的结束符号从分号;临时改为两个$(可以是自定义)

CREATE PROCEDURE p1()
BEGIN
 select count(*) from stu;
END $

DELIMITER ;  #将语句的结束符号恢复为分号

MYSQL的存储过程_第1张图片

调用

call p1();

MYSQL的存储过程_第2张图片

查看

show create procedure p1;

删除

drop procedure if exists p1;

带参数 

MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式

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

in类型

DELIMITER $

CREATE PROCEDURE p2(in myid int)
BEGIN
 select * from stu where id=myid;
END $

DELIMITER ;

调用call p2(1);

MYSQL的存储过程_第3张图片

char类型的参数

DELIMITER $

CREATE PROCEDURE p2(in myname VARCHAR(255))
BEGIN
  set @sql = 'select * from stu where name = ?';  -- 拼接查询总记录的SQL语句 
  prepare stmt from @sql; -- 预定义一个语句,并将它赋给 stmt
  set @a=myname;
  execute stmt using @a; -- 执行语句带参数,有其他参数加,分开
  deallocate prepare stmt;-- 要释放一个预定义语句的资源
END $

DELIMITER ;

 调用

MYSQL的存储过程_第4张图片

out类型

DELIMITER $

CREATE PROCEDURE p3(out result int)
BEGIN
 set result=1;
END $

DELIMITER ;

调用,传入一个无初始化的变量

 

结果 

MYSQL的存储过程_第5张图片

inout类型

DELIMITER $

CREATE PROCEDURE p4(inout result int)
BEGIN
 set result:=result+1;
END $

DELIMITER ;

调用,传入一个初始化的变量result,查看输出结果result

MYSQL的存储过程_第6张图片

你可能感兴趣的:(mysql面试题,mysql,数据库)