存储过程与函数

  • 两者都类似于方法,封装一组语句,向外部隐藏细节提供接口,提高代码重用
  • 特点:
    一组预先编译好的SQL语句集合
    减少编译次数以及和数据库的连接次数,提高效率
    适合做批量插入修改
  • 存储过程
  1. 创建语法
    create procedure 存储过程名(参数列表)
    begin
    存储过程体(sql语句)
    end
    注意:1. 参数列表包括三部分(参数模式,参数名,参数类型)
    参数模式包括:
    IN :该参数需要传入值
    OUT:该参数可以作为返回值
    INOUT: 该参数既需要传入值,又可以返回值
    2. 如果存储体只有一句话,Begin end可以省略
    3. 存储体中sql语句必须加分号,存储过程结束的标记可以通过 delimiter 重新设置
  2. 调用语法
    call 存储过程名(实参列表)
  3. 删除语法
    语法: drop procedure 存储过程名;
    一次只能删除一个。
  4. 查看存储过程信息
    show create procedure 存储过程名;
  • 函数
  1. 函数只能有一个返回,适合做处理数据后返回一个结果
  2. 创建语法:
    create function 函数名(参数列表) returns 返回类型
    begin
    函数体
    end
    参数列表:参数名+类型
    函数体:肯定有return 语句
  3. 调用语法
    select 函数名(参数列表)
  4. 查看函数
    show create function 函数名;
  5. 删除函数
    drop function 函数名;

```sql
-------------------------------------------存储过程----------------------------------------------
## 1. 空参列表
## 插入admin五条记录

DELIMITER $
CREATE PROCEDURE myp1()
BEGIN 
	INSERT INTO admin(`username`,`password`) 
	VALUES('john',1000),('jack',1001),('tom',1003);
END $
CALL myp1()$

## 2. in模式的参数
## 创建存储过程实现根据女生名查询男生信息
SELECT * FROM beauty;
SELECT * FROM boys;

CREATE PROCEDURE myp2(IN beautyName VARCHAR(20))
BEGIN
	SELECT bo.*
	FROM boys bo
	RIGHT OUTER JOIN beauty b
	ON bo.id=b.boyfriend_id
	WHERE b.name=beautyName;
END $
CALL myp2('柳岩')$

## 实现用户是否登录成功
CREATE PROCEDURE myp3(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 myp3('张飞','888')$

## 3. 创建out模式
## 根据女生名返回男生名和男生魅力值
CREATE PROCEDURE myp4(IN beautyName VARCHAR(20),OUT boyName VARCHAR(20),OUT userCP INT)
BEGIN
	SELECT bo.boyName,bo.userCP INTO boyName,userCP
	FROM boys bo
	JOIN beauty b
	ON bo.id=b.boyfriend_id
	WHERE b.name=beautyName;
END$
CALL myp4('王语嫣',@bname,@userCP)$

SELECT @bname,@userCp$

## 4. 创建inout模式
CREATE PROCEDURE myp6(INOUT a INT,INOUT b INT)
BEGIN 
	SET a=a*2;
	SET b=b*2;
END $
SET @m=10$
SET @n=20$
CALL myp6(@m,@n)$
SELECT @m,@n;
-------------------------------------------函数----------------------------------------------
CREATE FUNCTION myf1() RETURNS INT
BEGIN 
	DECLARE C INT DEFAULT 0; #定义局部/用户变量作为返回值
	SELECT COUNT(*) INTO C
	FROM employees;
	RETURN C;#赋值返回值
END $
SELECT myf1()$

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值