前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >MySQL复习资料(七)——MySQL-存储过程

MySQL复习资料(七)——MySQL-存储过程

作者头像
红目香薰
发布2022-11-29 20:37:23
发布2022-11-29 20:37:23
60000
代码可运行
举报
文章被收录于专栏:CSDNToQQCodeCSDNToQQCode
运行总次数:0
代码可运行

📋导读📋

💝博客主页:红目香薰_CSDN博客-大数据,MySQL,Java领域博主💝 ✍本文由在下【红目香薰】原创,首发于CSDN✍ 🤗2022年最大愿望:【服务百万技术人】🤗

📋前言📋

本文属于系列文章,分别为: MySQL复习资料(一)——MySQL环境安装 MySQL复习资料(二)——MySQL-DDL语句 MySQL复习资料(三)——MySQL-DML语句 MySQL复习资料(四)——MySQL-聚合函数 MySQL复习资料(五)——MySQL-索引 MySQL复习资料(六)——MySQL-多表联合查询 MySQL复习资料(七)——MySQL-存储过程 MySQL复习资料(八)——MySQL-事务 MySQL复习资料(九)——MySQL-图形化工具使用

📋正文📋

MySQL复习资料(七)——MySQL-存储过程

目录

存储过程的概念

存储过程的创建与执行

创建存储过程示例

使用存储过程

存储过程的概念

存储过程是数据中的一个重要的对象,它是在大型数据库系统中一组为了完成特定功能的SQL语句集,在第一次使用经过编译后,再次调用就不需要重复编译,因此执行效率比较高。它与函数在数据库中的异同点如下: (1)存储过程与函数的相同点在于,它们的目的都是为了可重复地执行数据库SQL语 句的集合,并且都是经过一次编译后,后面再次需要时直接执行即可; (2)存储过程与函数的不相同点有4个,具体如下: 语法中实现的标识符不同,存储过程使用PROCEDURE,函数为FUNCTION。 存储过程在创建时没有返回值,而函数在定义时必须设置返回值。 存储过程没有返回值类型,且不能将结果直接赋值给变量;而函数定义时需要设置返回值类型,且在调用时必须将返回值赋给变量。 存储过程须通过CALL进行调用,不能使用SELECT调用;而函数则可在SELECT语句中使用

存储过程的创建与执行

存储过程在创建时与创建函数相同,首先都需要临时修改语句结束符号。然后再利用CREATE语句进行创建,其基本语法格式如下:

代码语言:javascript
代码运行次数:0
复制
DELIMITER  新结束符号
CREATE  PROCEDURE  过程名字([[ IN  |  OUT  |  INOUT]  参数名称 参数类型])
BEGIN
	过程体
END

在上述语法中,创建存储过程的关键字为PROCEDURE,在为存储过程设置参数时,在参数名前还可以指定参数的来源及用途,可选值分别为IN(默认值)、OUT和INOUT。

IN、OUT、INOUT三者的区别如下所示: IN:表示输入参数,即参数是在调用存储过程时传入到存储过程里面使用,传入的数据可以是直接数据(如5),也可以是保存数据的变量。 OUT:表示输出参数,初始值为NULL,它是将存储过程中的值保存到OUT指定的参数中,返回给调用者。 INOUT:表示输入输出参数,即参数在调用时传入到存储过程,同时在存储过程中操作之后,又可将数据返回为调用者。

创建存储过程示例

代码语言:javascript
代码运行次数:0
复制
delimiter $$
create procedure test_fun(in in_age int)
begin
	select * from users where age=in_age;
end
$$
delimiter ;
#查询存储过程是否创建成功
show procedure status like 'test_fun';

使用存储过程

代码语言:javascript
代码运行次数:0
复制
call test_fun(22);

测试表:

代码语言:javascript
代码运行次数:0
复制
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (
  `id` int(8) NOT NULL AUTO_INCREMENT,
  `createDate` datetime(0) NOT NULL,
  `userName` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `passWord` varchar(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `age` int(3) NOT NULL,
  `phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `introduce` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `userName_index`(`userName`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO `users` VALUES (1, '2022-06-26 13:43:11', 'admin', '123456', 22, '15912345678', '喜欢学习.');
INSERT INTO `users` VALUES (2, '2022-06-26 13:43:11', 'zhangsan', '123456', 32, '15912345678', '喜欢做饭.');
INSERT INTO `users` VALUES (3, '2022-06-26 13:43:11', 'lisi', '45451', 42, '15912345678', '喜欢化妆.');
INSERT INTO `users` VALUES (4, '2022-06-26 13:43:11', 'zhaoliu', '2222', 52, '15912345678', '喜欢武术.');
INSERT INTO `users` VALUES (5, '2022-06-26 13:43:11', 'zhaoliu', '11111', 16, '15912345678', '喜欢舞蹈.');
INSERT INTO `users` VALUES (6, '2022-06-26 13:43:11', 'zhaoliu', '123787', 27, '15912345678', '喜欢泡妞.');

测试语句

代码语言:javascript
代码运行次数:0
复制
call fahai(1,'法海你不懂爱,雷峰塔你掉下来');

delimiter $$ #开启边界
create procedure fahai(in new_id int,intro varchar(50))
BEGIN

update users set introduce=intro where id=new_id;

END
$$
delimiter ;#结束边界

可以通过索引的对照实验看看存储过程具体怎么应用,链接地址如下:

mysql索引_效率测试(包含测试sql脚本300万条数据),可用作教学案例。_红目香薰-CSDN博客

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 📋导读📋
  • 📋前言📋
  • 📋正文📋
    • MySQL复习资料(七)——MySQL-存储过程
    • 存储过程的概念
    • 存储过程的创建与执行
      • 创建存储过程示例
      • 使用存储过程
      • 测试表:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档