首页 > 数据库 >mysql8.0存储过程和存储函数的查看、修改、删除

mysql8.0存储过程和存储函数的查看、修改、删除

时间:2024-01-04 21:00:42浏览次数:49  
标签:语句 存储 函数 删除 DATA mysql8.0 SQL 过程

5、存储过程和存储函数的查看、修改、删除

5.1、查看

创建完之后,怎么知道我们创建的存储过程、存储函数是否成功了呢?
MySQL存储了存储过程和函数的状态信息,用户可以使用SHOW STATUS语句或SHOW CREATE语句来查看,也可直接从系统的information_schema数据库中查询。

这里介绍3种方法。
1. 使用SHOW CREATE语句查看存储过程和函数的创建信息
基本语法结构如下:
SHOW CREATE {PROCEDURE | FUNCTION} 存储过程名或函数名

2. 使用SHOW STATUS语句查看存储过程和函数的状态信息
基本语法结构如下:
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
这个语句返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。

mysql8.0存储过程和存储函数的查看、修改、删除_数据库

3. 从information_schema.Routines表中查看存储过程和函数的信息
MySQL中存储过程和函数的信息存储在information_schema数据库下的Routines表中。
可以通过查询该表的记录来查询存储过程和函数的信息。
其基本语法形式如下:
SELECT * FROM information_schema.Routines
WHERE ROUTINE_NAME='存储过程或函数的名' [AND ROUTINE_TYPE = {'PROCEDURE|FUNCTION'}];
说明:如果在MySQL数据库中存在存储过程和函数名称相同的情况,最好指定ROUTINE_TYPE查询条件来指明查询的是存储过程还是函数

5.2、修改

修改存储过程或函数,不影响存储过程或函数功能,只是修改相关特性。使用ALTER语句实现。
ALTER {PROCEDURE | FUNCTION} 存储过程或函数的名 [characteristic ...]
其中,characteristic指定存储过程或函数的特性,其取值信息与创建存储过程、函数时的取值信息略有不同。
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'

CONTAINS SQL ,表示子程序包含SQL语句,但不包含读或写数据的语句。
NO SQL ,表示子程序中不包含SQL语句。
READS SQL DATA ,表示子程序中包含读数据的语句。
MODIFIES SQL DATA ,表示子程序中包含写数据的语句。
SQL SECURITY { DEFINER | INVOKER } ,指明谁有权限来执行。
    DEFINER ,表示只有定义者自己才能够执行。
    INVOKER ,表示调用者可以执行。
COMMENT 'string' ,表示注释信息

举例1:
修改存储过程CountProc的定义。将读写权限改为MODIFIES SQL DATA,并指明调用者可以执行,代码如下:
ALTER PROCEDURE CountProc MODIFIES SQL DATA SQL SECURITY INVOKER ;

SELECT specific_name,sql_data_access,security_type
FROM information_schema.`ROUTINES`
WHERE routine_name = 'CountProc' AND routine_type = 'PROCEDURE';
结果显示,存储过程修改成功。从查询的结果可以看出,访问数据的权限(SQL_DATA_ ACCESS)已经变成MODIFIES SQL DATA,安全类型(SECURITY_TYPE)已经变成INVOKER。

举例2:
修改存储函数CountProc的定义。将读写权限改为READS SQL DATA,并加上注释信息“FIND NAME”,代码如下:
ALTER FUNCTION CountProc
READS SQL DATA
COMMENT 'FIND NAME' ;
存储函数修改成功。从查询的结果可以看出,访问数据的权限(SQL_DATA_ACCESS)已经变成READS SQL DATA,函数注释(ROUTINE_COMMENT)已经变成FIND NAME。

5.3、删除

删除存储过程和函数,可以使用DROP语句,其语法结构如下:
DROP {PROCEDURE | FUNCTION} [IF EXISTS] 存储过程或函数的名
IF EXISTS:如果程序或函数不存储,它可以防止发生错误,产生一个用SHOW WARNINGS查看的警告。

6、关于存储过程使用的争议

6.1、优点

1、存储过程可以一次编译多次使用。存储过程只在创建时进行编译,之后的使用都不需要重新编译,这就提升了 SQL 的执行效率。
2、可以减少开发工作量。将代码 封装 成模块,实际上是编程的核心思想之一,这样可以把复杂的问题拆解成不同的模块,
   然后模块之间可以 重复使用 ,在减少开发工作量的同时,还能保证代码的结构清晰。
3、存储过程的安全性强。我们在设定存储过程的时候可以 设置对用户的使用权限 ,这样就和视图一样具有较强的安全性。
4、可以减少网络传输量。因为代码封装到存储过程中,每次使用只需要调用存储过程即可,这样就减少了网络传输量。
5、良好的封装性。在进行相对复杂的数据库操作时,原本需要使用一条一条的 SQL 语句,可能要连接多次数据库才能完成的操作,现在变成了一次存储过程,只需要连接一次即可 。

6.2、缺点

阿里开发规范
【强制】禁止使用存储过程,存储过程难以调试和扩展,更没有移植性。

1、可移植性差。存储过程不能跨数据库移植,比如在 MySQL、Oracle 和 SQL Server 里编写的存储过程,在换成其他数据库时都需要重新编写。
2、调试困难。只有少数 DBMS 支持存储过程的调试。对于复杂的存储过程来说,开发和维护都不容易。虽然也有一些第三方工具可以对存储过程进行调试,但要收费。
3、存储过程的版本管理很困难。比如数据表索引发生变化了,可能会导致存储过程失效。我们在开发软件的时候往往需要进行版本管理,但是存储过程本身没有版本控制,版本迭代更新的时候很麻烦。
4、它不适合高并发的场景。高并发的场景需要减少数据库的压力,有时数据库会采用分库分表的方式,而且对可扩展性要求很高
在这种情况下,存储过程会变得难以维护, 增加数据库的压力 ,显然就不适用了。

标签:语句,存储,函数,删除,DATA,mysql8.0,SQL,过程
From: https://blog.51cto.com/u_13236892/9105041

相关文章

  • 【Netapp数据恢复】Netapp存储lun被误删除的数据恢复案例
    Netapp存储数据恢复环境&故障情况:某单位一台Netapp存储,该Netapp存储内共有数十块SAS硬盘。工作人员误操作删除了Netapp存储中12个lun,删除的数据包括客户信息和其他重要数据。Netapp存储数据恢复过程:1、将故障存储中所有磁盘编号后取出,硬件工程师经过检测没有发现存在硬件故障。......
  • mysql8.0大小写的坑
    这两天又被mysql8.0大小写的问题坑到了,看下面的报错:chown:cannotaccess'./proc/38/fd/6':Nosuchfileordirectorychown:cannotaccess'./proc/38/fd/7':Nosuchfileordirectorychown:cannotaccess'./proc/38/fdinfo/4':Nosuchfileordire......
  • 记录H5中使用手机端摄像头拍照存储Base64格式图片
    前面把openssl配置好了,现在在手机端就可以输入https://ip:port访问我的应用客户端了,今天在测试的过程中发现一些问题。问题一:手机端点开后发现是前置摄像头。需要加个video的配置项,facingMode:{exact:"environment"} 这个加了之后,在pc端打开摄像头就会报错,暂时只能在手机上调......
  • 安卓之数据存储管理的使用场景以及技术优劣分析
    一、文章摘要在安卓应用开发中,数据存储管理是关键环节之一,涉及到用户数据的持久化、应用程序状态的保存以及离线内容的缓存等场景。本文将探讨安卓数据存储管理的使用场景、应用前景,以及各种技术的优劣分析,同时附上相关代码示例。二、正文2.1、使用场景2.1.1、用户设置应用程序中的......
  • influxdb 进行数据删除和修改
    本文为博主原创,转载请注明出处:1.条件删除数据InfluxDB只支持基于时间的删除操作。可以使用 DELETE 语句来删除指定时间范围内的数据。例如,以下的SQL语句将删除 measurement_name 表中时间在'2023-06-30'到'2023-06-3015:16:01'之间的所有数据:DELETEFROMmeasure......
  • mysql8.0存储函数
    4、存储函数的使用4.1、语法分析学过的函数:LENGTH、SUBSTR、CONCAT等语法格式CREATEFUNCTION函数名(参数名参数类型,...)RETURNS返回值类型[characteristics...]BEGIN函数体#函数体中肯定有RETURN语句END说明:1、参数列表:指定参数为IN、OUT或INOUT只对PROCE......
  • PG数据库存储验证
    PG数据库存储验证背景最近学习了SQLServer数据库的varchar和nvarchar的存储想到PG数据库其实没让选择字符集,也没有nvarchar所以想学习一下nvarchar的使用情况建表以及插入sqlsu-postgrespsqlcreatedatabasezhaobsh\czhaobshcreatetablezhaobsh(zhaobshvarchar(30));......
  • 怎么完全删除KVM虚拟机
    使用KVM创建的虚拟机确定不需要了可以使用以下方式删除找到改虚拟机对应的磁盘列出虚拟机磁盘,假如需要删除虚拟机名为CentOSES01213#virshdomblklistCentOSES01213目标源----------------------------------hda/kvm/CentOSES01213.qcow2hdb-删除虚拟机#停......
  • riak_cs elrang 的s3 存储服务
    riak_cs是riak团队开发的s3兼容存储,基于了riakkv,目前似乎缺少维护了(毕竟已经有不少开源而且更加强大的s3实现了)riak_cs基于erlang开发,对于学习下设计还是比较有帮助的,同时也能学习下erlang项目开发说明当然riak做为一个分布式的no-sql数据库还是最出名的,其他组件似乎使用的人......
  • mysql8.0存储过程
    1、存储过程概述1.1、理解含义:存储过程的英文是StoredProcedure。它的思想很简单,就是一组经过预先编译的SQL语句的封装。执行过程:存储过程预先存储在MySQL服务器上,需要执行的时候,客户端只需要向服务器端发出调用存储过程的命令,服务器端就可以把预先存储好的这一系列SQL......