
MySQL之存储过程和函数
创建存储过程:sayHi
发布日期:2021-05-07 08:40:58
浏览次数:20
分类:精选文章
本文共 1636 字,大约阅读时间需要 5 分钟。
MySQL版本:5.5.62-LOG
1.什么是存储过程和函数?
相同点:
存储过程和函数是事先经过编译并存储到数据库中的一段SQL语句的集合
,简化
应用开发人员的工作
,减少数据在数据库和应用服务器之间的传输
,提高数据处理的效率
。
不同点:
存储过程和函数的区别在于
函数必须有返回值
,而存储过程没有,存储过程的参数可以使用IN、OUT、INOUT类型
,而函数的参数只能是IN类型的
。如果有函数从其他类型的数据库迁移到MySQL,那么就可能因此需要将函数改造成存储过程。
2.存储过程和函数需要的权限
对于我们创建存储过程和函数,MySQL首先是需要确认当前操作的用户是否具有相应的权限的
创建:需要CREATE ROUTINE权限
修改或者删除:需要ALTER ROUTINE权限
执行:需要EXECUTE权限
3.创建存储过程和函数
语法:

DELIMITER // -- 用于定义当前的存储过程的结束符,可以避免与;冲突CREATE PROCEDURE sayHi()BEGIN SELECT 'hello world!'; -- 创建存储过程的SQL主体END // -- 表示当前的存储过程结束DELIMITER ; --还原mysql中的操作结束符
创建函数:say
DELIMITER //CREATE FUNCTION say(context VARCHAR(20)) --这里添加参数的时候需要按照参数名称 参数类型RETURNS VARCHAR(20) --这里需要返回值还有返回值类型BEGIN RETURN context;END //DELIMITER ;
4.使用存储过程和函数
使用存储过程语法:call 存储过程名
-- 调用上面的存储过程sayHiCALL sayHi();
-- 调用上面创建的函数saySELECT say('hello world!');
5.使用存储过程或者函数需要注意的地方
- 在存储过程中
可以执行commit和rollback
,也可以执行其他的存储过程和函数 不能在存储过程或者函数中执行load data infile语句
6.修改存储过程或函数
发现当前的存储过程或函数的修改只能修改权限或者验证之类的但是不能修改当前执行的SQL语句!
7.查看存储过程
- 查看存储过程或函数的状态
show [procedure|function] status like '存储过程名或者函数名'
- 查看存储过程或者函数的定义
show create [procedure|function] 存储过程名或函数名;
- 通过查看information_schema.Rountines了解存储过程和函数信息
SELECT * FROM information_schema.ROUTINES WHERE routine_name='存储过程名或函数名'
8.删除存储过程或函数
语法:drop [procedure|function] [if exists] 存储过程名称
-- 删除存储过程DROP PROCEDURE IF EXISTS sayHi ;-- 删除函数DROP FUNCTION IF EXISTS say
9.总结
1.存储过程和函数是一种存在服务器端的预编译的SQL语句,可以大大的提高开发者的能力
2.执行存储过程或函数需要execute权限,删除或者修改需要alter ROUTINE权限,创建需要create ROUTINE权限
3.存储过程与函数的区别在于,函数需要指定returns 参数类型
,其中需要return 返回值
(与定义的returns中的类型一致)
4.可以通过information_schema中的ROUTINES表
查看所有存储过程和函数,其类别有ROUTINE_TYEP
决定
以上纯属个人见解,如有问题请联本人!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月15日 15时24分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
VTK:可视化之PointSize
2021-05-12
VTK:可视化之RandomProbe
2021-05-12
VTK:可视化算法之Cutter
2021-05-12
block多队列分析 - 2. block多队列的初始化
2021-05-12
Java时间
2021-05-12
不编译只打包system或者vendor image命令
2021-05-12
MySQL
2021-05-12
The wxWindows Library Licence (WXwindows)
2021-05-12
十一届省赛总结
2021-05-12
leetcode——第203题——虚拟头结点
2021-05-12
leetcode——第1047题——删除字符串中的相邻重复子串
2021-05-12
leetcode——第108题——将有序数组转换为二叉搜索树
2021-05-12
JVM调优实战
2021-05-12
【编程】C语言入门:1到 100 的所有整数中出现多少个数字9
2021-05-12
【刷题】P94剑指offer:动态规划与贪婪算法:面试题14:剪绳子
2021-05-12
Java——for语句一些简单的应用
2021-05-12
python基础
2021-05-12
MySQL----基础及常用命令
2021-05-12
Ubuntu:系统重刷中那些奇奇怪怪的问题
2021-05-12
模拟集成:MOS管的工作区小误区(简单版)
2021-05-12