前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL数据库,详解流程控制语句(二)

MySQL数据库,详解流程控制语句(二)

作者头像
用户1289394
发布2021-11-23 15:26:40
3590
发布2021-11-23 15:26:40
举报
文章被收录于专栏:Java学习网Java学习网

创建存储过程:

/*删除存储过程proc1*/

DROP PROCEDURE IF EXISTS proc1;

/*s删除id=6的记录*/

DELETE FROM t_user WHERE id=6;

/*声明结束符为$*/

DELIMITER $

/*创建存储过程proc1*/

CREATE PROCEDURE proc1(id int,sex_str varchar(8),name varchar(16))

BEGIN

/*声明变量v_sex⽤于存放性别*/

DECLARE v_sex TINYINT UNSIGNED;

/*根据sex_str的值来设置性别*/

CASE sex_str

when '男' THEN

SET v_sex = 1;

WHEN '⼥' THEN

SET v_sex = 2;

END CASE ; /*插⼊数据*/

INSERT INTO t_user VALUES (id,v_sex,name);

END $

/*结束符置为;*/

DELIMITER ;

调⽤存储过程:

CALL proc1(6,'男','郭富城');

查看效果:

mysql> select * from t_user;

+----+-----+---------------+

| id | sex | name |

+----+-----+---------------+

| 1 | 1 | 路⼈甲Java |

| 2 | 1 | 张学友 |

| 3 | 2 | 王祖贤 |

| 4 | 1 | 郭富城 |

| 5 | 2 | 李嘉欣 |

| 6 | 1 | 郭富城 |

+----+-----+---------------+

6 rows in set (0.00 sec)

示例3:函数中使⽤

需求:写⼀个函数,根据t_user表sex的值,返回男⼥

创建函数:

/*删除存储过程proc1*/

DROP FUNCTION IF EXISTS fun1;

/*声明结束符为$*/

DELIMITER $

/*创建存储过程proc1*/

CREATE FUNCTION fun1(sex TINYINT UNSIGNED)

RETURNS varchar(8)

BEGIN

/*声明变量v_sex⽤于存放性别*/ DECLARE v_sex VARCHAR(8);

CASE sex

WHEN 1 THEN

SET v_sex:='男';

ELSE

SET v_sex:='⼥';

END CASE;

RETURN v_sex;

END $

/*结束符置为;*/

DELIMITER ;

看⼀下效果:

mysql> select sex, fun1(sex) 性别,name FROM t_user;

+-----+--------+---------------+

| sex | 性别 | name |

+-----+--------+---------------+

| 1 | 男 | 路⼈甲Java |

| 1 | 男 | 张学友 |

| 2 | ⼥ | 王祖贤 |

| 1 | 男 | 郭富城 |

| 2 | ⼥ | 李嘉欣 |

| 1 | 男 | 郭富城 |

+-----+--------+---------------+

6 rows in set (0.00 sec)

第2种⽤法

类似于java中多重if语句。

case

when 条件1 then 结果1或者语句1(如果是语句需要加分号)

when 条件2 then 结果2或者语句2

...

else 结果n或者语句nend [case] (如果是放在begin end之间需要加case,如果是在select后⾯case可以省

略)

这种写法和1中的类似,⼤家⽤上⾯这种语法实现第1中⽤法中的3个⽰例,贴在留⾔中。

if结构

if结构类似于java中的 if..else if...else的语法,如下:

if 条件语句1 then 语句1;

elseif 条件语句2 then 语句2;

...

else 语句n;

end if;

只能使⽤在begin end之间。

示例

写⼀个存储过程,实现⽤户数据的插⼊和新增,如果id存在,则修改,不存在则

新增,并返回结果

/*删除id=7的记录*/

DELETE FROM t_user WHERE id=7;

/*删除存储过程*/

DROP PROCEDURE IF EXISTS proc2;

/*声明结束符为$*/

DELIMITER $

/*创建存储过程*/

CREATE PROCEDURE proc2(v_id int,v_sex varchar(8),v_name

varchar(16),OUT result TINYINT)

BEGIN

DECLARE v_count TINYINT DEFAULT 0;/*⽤来保存user记录的数量*/

/*根据v_id查询数据放⼊v_count中*/

select count(id) into v_count from t_user where id = v_id;

/*v_count>0表⽰数据存在,则修改,否则新增*/

if v_count>0 THEN

BEGIN DECLARE lsex TINYINT;

select if(lsex='男',1,2) into lsex;

update t_user set sex = lsex,name = v_name where id = v_id;

/*获取update影响⾏数*/

select ROW_COUNT() INTO result;

END;

else

BEGIN

DECLARE lsex TINYINT;

select if(lsex='男',1,2) into lsex;

insert into t_user VALUES (v_id,lsex,v_name);

select 0 into result;

END;

END IF;

END $

/*结束符置为;*/

DELIMITER ;

看效果:

mysql> SELECT * FROM t_user;

+----+-----+---------------+

| id | sex | name |

+----+-----+---------------+

| 1 | 1 | 路⼈甲Java |

| 2 | 1 | 张学友 |

| 3 | 2 | 王祖贤 |

| 4 | 1 | 郭富城 |

| 5 | 2 | 李嘉欣 |

| 6 | 1 | 郭富城 |

+----+-----+---------------+

6 rows in set (0.00 sec)

mysql> CALL proc2(7,'男','黎明',@result);

Query OK, 1 row affected (0.00 sec)

mysql> SELECT @result;

+---------+

| @result |+---------+

| 0 |

+---------+

1 row in set (0.00 sec)

mysql> SELECT * FROM t_user;

+----+-----+---------------+

| id | sex | name |

+----+-----+---------------+

| 1 | 1 | 路⼈甲Java |

| 2 | 1 | 张学友 |

| 3 | 2 | 王祖贤 |

| 4 | 1 | 郭富城 |

| 5 | 2 | 李嘉欣 |

| 6 | 1 | 郭富城 |

| 7 | 2 | 黎明 |

+----+-----+---------------+

7 rows in set (0.00 sec)

mysql> CALL proc2(7,'男','梁朝伟',@result);

Query OK, 1 row affected (0.00 sec)

mysql> SELECT @result;

+---------+

| @result |

+---------+

| 1 |

+---------+

1 row in set (0.00 sec)

mysql> SELECT * FROM t_user;

+----+-----+---------------+

| id | sex | name |

+----+-----+---------------+

| 1 | 1 | 路⼈甲Java |

| 2 | 1 | 张学友 |

| 3 | 2 | 王祖贤 |

| 4 | 1 | 郭富城 | | 5 | 2 | 李嘉欣 |

| 6 | 1 | 郭富城 |

| 7 | 2 | 梁朝伟 |

+----+-----+---------------+

7 rows in set (0.00 sec)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档