MySQL之SQL——存储过程、函数、流程控制结构

目录

1.存储过程

(1)创建和调用语法

1)创建语法

2)调用语法

(2)创建和调用案例

1)空参列表

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

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

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

(3)删除存储过程

(4)查看存储过程的信息

2.函数

(1)创建和调用语法

1)创建语法

2)调用语法

(2)创建和调用案例

1)无参有返回

2)有参有返回

(3)查看函数

(4)删除函数

3.流程控制结构

(1)分支结构

1)if

2)case

     a.作为表达式使用的案例

     b.独立使用的案例

3)if结构

(2)循环结构

(1)while

(2)loop

(3)repeat

(4)案例

1)没有添加循环控制语句

2)添加leave语句

3)添加iterate语句


存储过程和函数:类似于java中的方法

1.存储过程

含义:一组预先编译好的SQL语句的集合,理解成批处理语句

好处:

  1. 提高代码的重用性
  2. 简化操作
  3. 减少了编译次数(当我们定义一个存储过程a,当我们再次调用a的时候,首先会看它是否已经编译过,如果编译过,就不需要再编译)
  4. 减少了和数据库服务器的连接次数,提高了效率(有3个语句,如果让它们各自执行的话,每一条执行都需要连接数据库,使用存储过程的话,只需要连接一次)

(1)创建和调用语法

1)创建语法

语法:

CREATE PROCEDURE 存储过程名(参数列表)
BEGIN

	存储过程体(一组合法的SQL语句)
END

注意事项:

1.参数列表包含三部分

参数模式  参数名  参数类型

举例:

in stuname varchar(20)

参数模式:

  • in:该参数可以作为输入,也就是该参数需要调用方传入值
  • out:该参数可以作为输出,也就是该参数可以作为返回值
  • inout:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

 

2.如果存储过程体仅仅只有一句话,begin end可以省略

3.存储过程体中的每条sql语句的结尾要求必须加分号。

4.存储过程的结尾可以使用 delimiter 重新设置

语法:
delimiter 结束标记    //只对一个客户端连接有效

案例:

delimiter $

2)调用语法

CALL 存储过程名(实参列表);

(2)创建和调用案例

1)空参列表

案例:插入到admin表中五条记录

//插入前
SELECT * FROM admin;

//创建
DELIMITER $   //设置$为存储过程的结束标志,对后面的语句都有效
CREATE PROCEDURE myp1()
BEGIN
	INSERT INTO admin(username,`password`) 
	VALUES('john1','0000'),('lily','0000'),('rose','0000'),('jack','0000'),('tom','0000');
END $

//调用
CALL myp1()$

SQLyog中不支持,直接在shell中运行如下:

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

案例1:创建存储过程实现 根据女神名,查询对应的男神信息

//创建
DELIMITER $
CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
	SELECT bo.*
	FROM boys bo
	RIGHT JOIN beauty b ON bo.id = b.boyfriend_id
	WHERE b.name=beautyName;
END $

//调用
CALL myp2('赵敏')$

案例2 :创建存储过程实现,用户是否登录成功

//创建
DELIMITER $
CREATE PROCEDURE myp4(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
	DECLARE result INT DEFAULT 0;  //声明并初始化
	
	SELECT COUNT(*) INTO result   //赋值
	FROM admin
	WHERE admin.username = username
	AND admin.password = PASSWORD;
	
	SELECT IF(result>0,'成功','失败');  //使用
END $

//调用
CALL myp4('张飞','8888')$

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

案例1:根据输入的女神名,返回对应的男神名

CREATE PROCEDURE myp6(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20))
BEGIN
    SELECT bo.boyname INTO boyname
    FROM boys bo
    RIGHT JOIN
    beauty b ON b.boyfriend_id = bo.id
    WHERE b.name=beautyName ;
END $

CALL myp6('赵敏',@bName)$

SELECT @bName$

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值