案例所涉及到的表如下:

CREATE TABLE `t_goods` (

`g_id` varchar(20) NOT NULL COMMENT '商品编号',

`g_name` varchar(30) DEFAULT NULL COMMENT '商品名称',

`g_price` float DEFAULT NULL COMMENT '商品价格',

`g_discount` float DEFAULT NULL COMMENT '折扣价格',

`g_star` int(11) DEFAULT NULL COMMENT '顾客评分(1:一星2:二星依次类推)',

`g_author` varchar(10) DEFAULT NULL COMMENT '作者',

`g_press` varchar(50) DEFAULT NULL COMMENT '出版社',

`g_publish_time` varchar(12) DEFAULT NULL COMMENT '出版时间(格式2019-12-12)',

`g_img_path` varchar(100) DEFAULT NULL COMMENT '商品图片所在路径',

`g_desc` varchar(500) DEFAULT NULL COMMENT '内容概述',

`g_number` int(11) DEFAULT NULL COMMENT '商品的数量',

PRIMARY KEY (`g_id`)

) ENGINE=MyISAM DEFAULT CHARSET=gb2312;

部分参考数据如下:

mysql存储过程与存储函数(MySQL存储过程的使用总结)(1)

一、MySQL存储过程的创建

建立个存储过程,将商品编号g_id=’ hadoop_001’这本书的价格加10元,并显示结果。实现过程如下:

DELIMITER//

CREATE PROCEDURE add_price()

BEGIN

UPDATE t_goods SET g_price = g_price 10 WHERE g_id='hadoop_001' ;

SELECT * FROM t_goods;

END;

//

CALL add_price()

二、MySQL存储过程的参数

分别建立个带参数in、out、inout的存储过程:

1、带in的参数

DELIMITER//

CREATE PROCEDURE demo_in(IN p_in INT)

BEGIN

SELECT p_in;

SET p_in=2;

SELECT p_in;

END;

//

SET @p_in=1

CALL demo_in(@p_in)

CALL demo_in(100)

2、带out参数

DELIMITER//

CREATE PROCEDURE demo_out(OUT p_out INT)

BEGIN

SELECT p_out;

SET p_out=2;

SELECT p_out;

END;

//

SET @p_out=1

CALL demo_out(@p_out) /*未被定义,返回为null */

SELECT @p_out; /*返回为2 */

3、带inout

DELIMITER//

CREATE PROCEDURE demo_inout(INOUT p_inout INT)

BEGIN

SELECT p_inout;

SET p_inout=2;

SELECT p_inout;

END;

//

DELIMITER

SET @p_inout=1

CALL demo_inout(@p_inout)

SELECT @p_inout;

三、MySQL存储过程的选择结构

使用选择结构判断如果商品编号是hadoop_001,则输出其商品名称。实现过程参考如下:

DELIMITER//

CREATE PROCEDURE goods_demo1()

BEGIN

DECLARE v1 VARCHAR(20);

DECLARE v2 VARCHAR(20);

SELECT g_id,g_name INTO v1,v2 FROM t_goods WHERE g_id='hadoop_001';

IF v1='hadoop_001' THEN

SELECT v2;

END IF;

END;

//

CALL goods_demo1()

四、MySQL存储过程的循环结构练习

使用循环结构实现1 2 3 … 100 = ? ,实现过程如下:

DELIMITER //

CREATE PROCEDURE while_demo()

BEGIN

DECLARE i INT;

DECLARE _sum INT;

SET i=0;

SET _sum=0;

WHILE i<=100 DO

SET _sum=_sum i;

SET i=i 1;

END WHILE;

SELECT _sum;

END ;

//

CALL while_demo()

结果为:

mysql存储过程与存储函数(MySQL存储过程的使用总结)(2)

五、MySQL存储过程的CASE分支语句

建立个存储过程,参数是订单状态pay_status ,其值为整数类型,使用case语句判断 pay_status的值,然后输出相应的结果。规则如下:

(1)pay_status = 0 ,则输出“微信支付”

(2)pay_status = 1 ,则输出“支付宝支付”

(3)pay_status = 0 ,则输出“银行卡支付”

DELIMITER //

CREATE PROCEDURE case_demo (IN pay_status INT)

BEGIN

DECLARE i INT;

SET i=pay_status;

CASE i

WHEN 0 THEN

SELECT '微信支付';

WHEN 1 THEN

SELECT '支付宝支付';

ELSE

SELECT '银行卡支付';

END CASE;

END ;

//

CALL case_demo(1)

,