mysql 存储过程 简书_MySQL:存储过程

1. 含义

一组预先编译好的SQL语句的集合

2. 好处

提高代码的重用性

简化操作

减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

3. 语法

创建

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

BEGIN

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

END

注意:

参数列表包含三部分:参数模式 参数名 参数类型( 例:IN stuname VARCHAR(20) )

参数模式有三种:

IN:该参数可以作为输入,也就是说该参数需要调用方传入值

OUT:该参数可以作为输出,也就是该参数可以作为返回值

INOUT:该参数既可以作为输入又可以作为输出,也就是该参数既需要传入值,又可以返回值

如果存储过程体只有一条语句,则BEGIN和END可以省略

存储过程体中的每条SQL语句的结尾要求必须加分号,存储过程的结尾可以使用 DELIMITER 重新设置,例:DELIMITER $

调用

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

4. 实例(使用命令行)

空参列表

插入到admin表中五条记录

-- 创建,将语句的结束标记改成$

DELIMITER $

CREATE PROCEDURE myp1 ()

BEGIN

INSERT INTO `admin` (`username`, `password`)

VALUES

('费渡', '1234'),

('简隋英', '1234'),

('李玉', '1234'),

('骆闻舟', '1234'),

('赵锦辛', '1234') ;

END $

-- 调用

CALL myp1 () $

-- 查看

select * from admin $

带IN模式参数的存储过程

根据女神名去查询对应的男神信息

-- 创建

CREATE PROCEDURE myp2 (IN beauty_name VARCHAR (20))

BEGIN

SELECT

bo.*

FROM

`beauty` AS b

RIGHT JOIN `boys` AS bo

ON b.`boyfriend_id` = bo.`id`

WHERE b.`name` = beauty_name ;

END $

-- 调用

CALL myp2 ('费渡') $

判断用户是否登录成功

-- 创建

CREATE PROCEDURE myp3 (

IN username VARCHAR (10),

IN `password` VARCHAR (10)

)

BEGIN

DECLARE nums INT ;

SELECT

COUNT(*) INTO nums

FROM

`admin` AS a

WHERE a.`username` = username

AND a.`password` = `password` ;

SELECT

IF (

nums = 1,

"登录成功",

"登录失败"

) AS result ;

END $

-- 调用

CALL myp3 ('费渡', '1234') $

带OUT模式的存储过程

根据女神名,返回对应的男神名

-- 创建

CREATE PROCEDURE myp4 (

IN beauty_name VARCHAR (50),

OUT boy_name VARCHAR (20)

)

BEGIN

SELECT

bo.`boyName` INTO boy_name

FROM

`beauty` AS b

RIGHT JOIN `boys` AS bo

ON b.`boyfriend_id` = bo.`id`

WHERE b.`name` = beauty_name ;

END $

-- 调用

CALL myp4 ('费渡', @name) $

SELECT

@name $

根据根据女神名,返回对应的男神名和魅力值

-- 创建

CREATE PROCEDURE myp5 (

IN beauty_name VARCHAR (50),

OUT boy_name VARCHAR (20),

OUT user_cp INT

)

BEGIN

SELECT

bo.`boyName`,

bo.`userCP` INTO boy_name,

user_cp

FROM

`beauty` AS b

RIGHT JOIN `boys` AS bo

ON b.`boyfriend_id` = bo.`id`

WHERE b.`name` = beauty_name ;

END $

-- 调用

CALL myp5 ('费渡', @name, @`value`) $

SELECT

@name,

@`value` $

带INOUT模式参数的存储过程

传入两个值,得到两个值的二倍

-- 创建

CREATE PROCEDURE myp6 (INOUT a INT, INOUT b INT)

BEGIN

SET a = a * 2 ;

SET b = b * 2 ;

END $

-- 调用

SET @a = 3 $

SET @b = 4 $

CALL myp6 (@a, @b) $

SELECT

@a,

@b $

5. 其他操作

删除存储过程

-- 不支持一次删除多个

DROP PROCEDURE myp1 ;

查看存储过程的信息

SHOW CREATE PROCEDURE myp2 ;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值