Mysql存储-变量、函数、游标、判断、循环

这篇具有很好参考价值的文章主要介绍了Mysql存储-变量、函数、游标、判断、循环。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

存储过程(procedure)

1、介绍:
存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。

存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用
2、特点
封装、复用
可以接收参数,也可以返回数据
减少网络交互,效率提升
3、基本语法
创建存储

CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
   -- SQL语句
END;

调用存储

call 存储过程名称

查看存储

-- 查看存储
-- 查看切换到指定库中指定存储创建具体信息
show create procedure  p1;
-- 查看库中所有存储
select * from information_schema.ROUTINES where ROUTINE_SCHEMA='test';

删除存储

DROP PROCEDURE [IF EXISTS] 存储过程名称;

案例

-- 创建存储
create procedure p4()
begin
    declare name_sto int;-- 定义变量
    select count(*) into name_sto from emp; -- 查询数据并且赋值给定义变量 into 变量名:数据来源复赋值变量
end;
-- 调用存储
call p4();
-- 查看存储
show create procedure  p4;
-- 删除存储
drop procedure p4;

变量

1、系统变量

介绍:
系统变量时MySQL服务器提供,不是用户定义的,属于服务器层面。
可分为:全局变量(GLOBAL)、会话变量(SESSION)。
全局变量在所有会话中有效,会话变量仅在当前会话中有效

查看系统变量:

-- 查看所有系统变量
SHOW [SESSION | GLOBAL] VARIABLES;

-- 可以通过like模糊匹配方式查找变量
SHOW [SESSION | GLOBAL] VARIABLES LIKE '...';

-- 查看指定变量的值
SELECT @@[SESSION. | GLOBAL.] 系统变量名;

设置系统变量:

SET [SESSION | GLOBAL] 系统变量名 =;
SET @@[SESSION. | GLOBAL.]系统变量名 =;

案例:文章来源地址https://www.toymoban.com/news/detail-730850.html

-- 变量:系统变量
-- 查看系统变量
show session variables;
show session variables like 'auto%';
show global variables like 'auto%';
select @@global.autocommit;

-- 设置系统变量
set session autocommit = 1;
set global autocommit = 1;
set @@global.autocommit = 1;

总结:mysql系统自带的变量可以通过系统变量的需求进行查看和设置

2、用户自定义变量

用户定义变量是用户根据需要自己定义的变量,用户变量不用提前声明,在用的时候直接用“@变量名”使用就可以。其作用域为当前连接(会话)。
语法:
赋值

SET @var_name = expr[, @var_name = expr] ...;
SET @var_name := expr[, @var_name := expr] ...;

SELECT @var_name := expr[, @var_name := expr] ...;
SELECT 字段名 INTO @var_name FROM 表名;

调用:
select @var_name

案例:

set @myname = 'itcast'; -- 自定义变量
set @int=14;
select @myname;-- 查看自定义变量
select @`int`;

局部变量

局部变量是根据需要定义的在局部生效的变量,访问之前,需要DECLARE声明。可用作存储过程内的局部变量和输入参数,局部变量的范围是在其内声明的BEGIN ... END块。

语法:

声明局部变量

DECLARE 变量名 变量类型 [DEFAULT ...];


局部变量赋值:

SET 变量名 = 值;
SET 变量名 := 值;
SELECT 字段名 INTO 变量名 FROM 表名 ...;

变量类型就是数据库字段类型:INT、BIGINT、CHAR、VARCAHR、DATE、TIME等

案例

create procedure p5()-- 创建存储
begin
    declare id int default 0;-- 声明局部变量
    set id=100;-- 变量赋值
    select count(*) into id from emp;-- 变量赋值
    select id;-- 查看变量或者调用局部变量返回给存储
end;

call p5;-- 调用存储过程

if

语法:

IF 条件1 THEN
  ...
ELSEIF 条件2 THEN    -- 可选
  ...
ELSE                -- 可选
  ...
END IF;

案例


create procedure  p6()
begin
    -- 声明局部变量
    declare score int default 60;-- 定义局部变量赋予默认值
    declare result varchar(100);-- 定义局部变量
    if score>80 then-- if编写
        set  result='优秀';
        elseif score>70 then
        set result='良好';
        else
        set  result='不合格';
    end if;
    select  result;-- 查看变量值返回存储
end;
call p6;-- 调用存储

参数(IN/OUT/INOUT)

参数:

IN 该类参数作为输入,也就是需要调用时传入值 默认
OUT 该类参数作为输出,也就是该参数可以作为返回值
INOUT 既可以作为输入参数,也可以作为输出参数

CREATE PROCEDURE 存储过程名称([IN/OUT/INOUT 参数名 参数类型])
BEGIN
  -- SQL语句
END;

case:

语法1:

CASE case_value
     WHEN when_value1 THEN statement_list1
     [WHEN when_value2 THEN statement_list2]...
     [ELSE statement_list]
END CASE;

语法2:

CASE
     WHEN search_condition1 WHEN statement_list1
     [WHEN search_condition2 WHEN statement_list2]...
     [ELSE statement_list]
END CASE;

案例:

-- 创建存储过程
create procedure p6(in month int)
begin
  declare result varchar(10);
  
  case
    when month >= 1 and month <= 3 then
      set result := '第一季度';
    when month >= 4 and month <= 6 then
      set result := '第二季度';
    when month >= 7 and month <= 9 then
      set result := '第三季度';
    when month >= 10 and month <= 12 then
      set result := '第四季度';
    else 
      set result := '非法传输';
  end case;
  
  select concat('您输入的月份为:',month,",所属的季度为:",result);
end;

-- 调用
call p6(8);

循环
1、while
while循环是有条件的循环控制语句。满足条件后,再执行循环体中的SQL语句。具体语法为:

# 先判定条件,如果条件为true,则执行逻辑,否则,不执行逻辑
WHILE 条件 DO
   SQL逻辑...
END WHILE;

2、repeat
repeat是有条件的循环控制语句,当满足条件的时候退出循环。具体语法为:

# 先执行一次逻辑,然后判定逻辑是否满足,如果满足,则退出。如果不满足,则继续下一次循环
REPEAT 
   SQL逻辑...
UNTIL 条件
END REPEAT;

存储函数

存储函数是有返回值的存储过程,存储函数的参数只能是IN类型的。

语法:

CREATE FUNCTION 存储函数名称([参数列表])
RETURNS type [characteristics ...]
BEGIN
	-- SQL语句
	RETURN ...;
END;

characteristics的说明:

DETERMINISTIC:相同的输入参数总是产生相同的结果
NO SQL:不包含SQL语句
READS SQL DATA:包含读取数据的语句,但不包含写入数据的语句。

案例:

-- 存储函数
-- 从1到n的累加
create function fun1(n int) 
returns int deterministic --返回类型
begin
	declare total int default 0;
	
	while n > 0 do
		set total = total + n;
		set n = n - 1;
	end while;
	
	return total;
end;

-- 调用存储函数,并显示结果
select fun1(100);

到了这里,关于Mysql存储-变量、函数、游标、判断、循环的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL基础篇——存储过程和函数中的变量

    🙌作者简介:数学与计算机科学学院学生、分享学习经验、生活、 努力成为像代码一样有逻辑的人 🌙个人主页:阿芒的主页 👉推荐一款刷题、找工作神器 牛客网注册即可免费刷题 这一节,介绍MySQL中的变量,为下一节学习存储过程和函数打下基础。 说明 变量由系统提供

    2024年01月23日
    浏览(34)
  • Mysql判断某个数据库中是否包含某个表,与pymysql工具函数

    查看某个数据库中的全部表: 因此查看某个库中的某个表可以使用: 在pymysql中,可以写一个简单的工具函数,用于查询某个数据库中是否包含某个表: 这里的_query函数请参考博客:python使用pymysql总是超时的解决方案

    2024年02月09日
    浏览(38)
  • MySQL数据库中的存储过程以及存储函数练习

     字段名       数据类型       主键    外键    非空   唯一    自增       id             INT               是      否       是       是           否    name    VARCHAR(50)   否      否       是       否           否    glass   VARCHAR(50)     否   

    2024年02月15日
    浏览(33)
  • 存储过程、触发器、游标、视图、自定义函数 字段类型、字段可空、统计字段、逻辑删除 权限系统数据库&无限极类别设计

    在数据库设计中,存储过程、触发器、游标、视图、自定义函数、字段类型、字段可空、统计字段、逻辑删除以及权限系统和无限级类别设计都是重要的概念。下面我将逐一解释这些概念,并提供相关的设计建议。 存储过程 (Stored Procedure) 定义 :存储过程是一组为了完成特定

    2024年03月09日
    浏览(87)
  • 数据库系统原理及MySQL应用教程实验七存储过程与函数的创建管理

    1. 理解存储过程和函数的概念。 2. 掌握创建存储过程和函数的方法。 3. 掌握执行存储过程和函数的方法。 4. 掌握游标的定义、使用方法。 1.验证性实验:某超市的食品管理的数据库的Food表对其操作。 2.设计性试验:学校教师管理数据库中的teacherInfo表对其操作。 三、实验步

    2024年02月03日
    浏览(42)
  • SQL Server判断数据库、表、列、视图、存储过程、函数是否存在

    在写一些业务逻辑相对复杂点的存储过程的时候,经常会用到临时表或者数据表作为临时结果的保存。但每次在作表是否存在的判断时,往往想不起完整的SQL写法。因此,记录一些常用的数据库对象是否存在的判断方法,可以达到快速查找的目的。正是:好记性不如烂笔头。

    2024年02月02日
    浏览(49)
  • 数据库实验 | 第5关:使用游标的存储过程

    本关任务: jdxx数据表有四个字段,分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。 例如,查询天心区(qxmc)的所有字段的值结果如图所示 建立存储过程 tjdq(in sf varchar(10)) 输入省份的名称,将该省份所有城市的所有地区的 乡x、镇z和街道jd和其他的个数插入到数据表dqtj中。

    2023年04月23日
    浏览(27)
  • sql server 截断和收缩所有用户数据库日志--用游标循环所有正常状态的用户数据库

    在服务器运维活动中,我们经常需要做一项工具就是将好多年的用户数据库日志文件截断并收缩为最小,以节省大量的磁盘空间。当数据库只有一两个时可以手动操作,但数据库数量众多时,就需要采用sql脚本,批量化执行这个过程。 本人写了一段这样的脚本。并且经过验证

    2024年02月06日
    浏览(37)
  • 数据库(mysql语句)循环语句

    例题1: 20到50之间能被5除余1的所有自然数的和   例题2: 实现如下图 代码  例题3: 代码:power表示power(i,j)-----i的j次方 例题4:  实现 代码:  注:substring是从1开始,第一个参数表示要截取的字符串,第二个i和第三个j表示从第i个开始截,截取j个,如:str=HELLO, subs

    2024年02月05日
    浏览(32)
  • MYSQL存储过程进行写读操作(for循环)

    在我们做统计的时候,尤其是复杂的数据统计,写sql是非常麻烦且痛苦的一件事情。尤其是表结构设计的不适合做统计的时候,更是难以下手。当做 统计的时候;需要牵扯到多张表且每个统计信息需要关联N张表才能出来结果的时候,大家可以用mysql的存储过程来进行业务处理

    2024年02月05日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包