当前位置: 首页 > news >正文

SQL一些关于存储过程和使用的总结

存储过程:数据库里的 "定制工具箱"

存储过程就像一个装满工具的箱子,你需要什么功能,就调用对应的工具。它是用 SQL 语句写好的一段程序,存储在数据库里,随时可以调用。

创建存储过程 就像在工具箱里放新工具。比如,我们创建一个计算学生总分的存储过程:

delimiter //
create procedure p_calAvg()
BEGINselect name, chinese + math + english as total from exam;
END //
delimiter ;

delimiter // 是在告诉数据库,我们暂时不用普通的分号 ; 结束语句,而是用 //,这样就能完整地创建存储过程啦!创建完成后别忘了用 delimiter ; 把分号变回来哦。

调用存储过程 就像从工具箱里拿出工具用:

call p_calAvg();

存储过程能减少网络传输,提高性能,就像把常用工具放在手边,随用随取。

变量:数据库里的 "小纸条"

在 MySQL 里,变量就像小纸条,把数据暂时记在上面,之后再用。

系统变量:数据库自带的 "便签"

系统变量是数据库自己准备好的便签,分为全局(所有用户都能看)和会话(只给自己看)两种:

  • 查看系统变量:SHOW VARIABLES LIKE 'character_set_server';

  • 设置系统变量:SET GLOBAL character_set_server = 'utf8mb4';

用户自定义变量:你的专属 "记事本"

你可以自己创建变量来保存临时数据:

SET @var_name = 123;  -- 赋值
SELECT @var_name;    -- 使用

局部变量:存储过程里的 "便签条"

在存储过程里,变量只能在过程里用,像这样:

DECLARE var_name INT DEFAULT 0;

变量能帮你保存中间结果,方便后续操作,就像做数学题时先把步骤记下来,最后再算出答案。

SQL 编程:让数据库学会 "思考"

SQL 也能像编程一样,根据条件做不同操作,甚至循环执行,就像给数据库装上了 "聪明大脑"。

条件语句:数据库的 "选择题"

IF 语句 就像给数据库出选择题:

IF score >= 90 THENSET grade = 'A';
ELSEIF score >= 60 THENSET grade = 'B';
ELSESET grade = 'C';
END IF;

CASE 语句 像更灵活的选择题,有两种写法:

  • 简单 CASE:CASE var_name WHEN 1 THEN 'A' WHEN 2 THEN 'B' ELSE 'C' END

  • 搜索结果 CASE:CASE WHEN score >= 90 THEN 'A' WHEN score >= 60 THEN 'B' ELSE 'C' END

循环语句:数据库的 "重复播放"

WHILE 循环 像设置个条件,满足就一直执行:

WHILE i <= 10 DOSET sum = sum + i;SET i = i + 1;
END WHILE;

REPEAT 循环 则是先执行,再判断是否继续:

SET i = 0;
REPEATSET sum = sum + i;SET i = i + 1;
UNTIL i > 10
END REPEAT;

LOOP 循环 像个简单的重复播放,配合 LEAVE(跳出循环)和 ITERATE(继续循环):

outer_loop: LOOPINNER LOOP: LOOPIF i > 5 THENLEAVE outer_loop;END IF;SET i = i + 1;ITERATE INNER LOOP;END LOOP;
END LOOP;

游标:数据的 "快递员"

游标能把查询结果一行行地送过来,方便你逐个处理:

  1. 声明游标:DECLARE cursor_name CURSOR FOR select...

  2. 打开游标:OPEN cursor_name;

  3. 获取数据:FETCH cursor_name INTO var_name1, var_name2;

  4. 关闭游标:CLOSE cursor_name;

条件处理程序:数据库的 "安全员"

条件处理程序能帮数据库应对各种异常情况,就像给它配了个安全员:

DECLARE CONTINUE HANDLER FOR SQLEXCEPTIONSET error_count = error_count + 1;

存储函数:数据库的 "小助手"

存储函数就像数据库的小助手,能返回计算结果:

CREATE FUNCTION Fun(n INT) RETURNS INT DETERMINISTIC
BEGINDECLARE total INT DEFAULT 0;WHILE n > 0 DOSET total = total + n;SET n = n - 1;END WHILE;RETURN total;
END

调用时直接用 SELECT Fun(10); 就能拿到结果啦!

http://www.lryc.cn/news/591114.html

相关文章:

  • 并发事务~
  • Selector的用法
  • 一台显示器上如何快速切换两台电脑主机?
  • Adobe Photoshop:数字图像处理的终极工具指南
  • JavaScript进阶篇——第八章 原型链、深浅拷贝与原型继承全解析
  • 爬虫逆向:一篇文章掌握 Hopper 的详细使用(macOS 和 Linux 反汇编程序:对可执行文件进行静态分析)
  • Alibaba-NLP/WebAgent 项目总结
  • 如何在PyCharm中删除虚拟环境
  • [MRCTF2020]PYWebsite
  • web APIs(更新中)
  • 中兴B860AV5.1-M2_S905L3SB最新完美版线刷包 解决指示灯异常问题
  • 【测试100问】为什么要做接口测试?
  • 大带宽服务器对于高流量网站的作用
  • 2025年6月GESP(C++一级):值日
  • 淘宝获取商品规格接口(item-sku)操作详解
  • 【Modelsim】原理图怎么看?
  • 【后端】.NET Core API框架搭建(8) --配置使用RabbitMQ
  • `@Configuration` 是 Spring 框架中的一个注解
  • Jmeter使用 -1
  • React Native打开相册选择图片或拍照 -- react-native-image-picker
  • php主流框架FastAdmin框架详解以及如何查看版本号和初始安装fastadmin框架-优雅草卓伊凡|大东家
  • Flutter在Android studio运行出现Error: Entrypoint is not a Dart file
  • HikariCP数据库连接池高性能优化实战指南
  • 23种设计模式--#2单例模式
  • git的cherry-pick
  • Py-Clipboard :iOS与Windows互相共享剪贴板(半自动)
  • AI+医疗!VR和MR解剖学和针灸平台,智能时代如何重塑健康未来
  • vue3实现web端和小程序端个人签名
  • [RAG] LLM 交互层 | 适配器模式 | 文档解析器(`docling`库, CNN, OCR, OpenCV)
  • docker安装与简单项目上手