最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何查看MySQL数据库中的所有自定义函数
时间:2026-08-28 09:18:47 编辑:袖梨 来源:一聚教程网
SHOW FUNCTION STATUS仅显示当前USE切换的数据库中的自定义函数,结果含函数名、类型、创建者、时间等元数据,但不包含函数体;需先USE目标库,否则返回空。
show function status 能查到什么
直接执行 SHOW FUNCTION STATUS,它只列出当前默认数据库(即你 USE db_name 切换进去的那个库)里的自定义函数,不跨库。结果包含函数名、类型、创建者、修改时间、安全特性等,但不显示函数体或 SQL 定义。
常见误操作:没先 USE your_db 就运行,结果返回空——因为默认在 information_schema 或 mysql 系统库下,而这些库没有你的自定义函数。
- 想查特定库的函数,必须先
USE your_database_name - 加
LIKE 'pattern'可模糊过滤,比如SHOW FUNCTION STATUS LIKE 'get_%' - 该命令不依赖权限检查,只要能连上且有对应库的 SELECT 权限即可执行
用 INFORMATION_SCHEMA.ROUTINES 查全量函数
这是最可靠的方式,能跨库查询,且返回函数定义原文。关键点在于 WHERE 条件要写对:
SELECT ROUTINE_NAME, ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = 'your_database_name' AND ROUTINE_TYPE = 'FUNCTION';
注意:ROUTINE_SCHEMA 是数据库名,不是表名;ROUTINE_DEFINITION 字段在 MySQL 8.0+ 默认可见,但若函数是用 DEFINER 创建且当前用户无 SUPER 权限,可能显示为 NULL。
- 想查所有库的自定义函数?把
ROUTINE_SCHEMA = 'xxx'换成ROUTINE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') - 如果只关心函数名和参数,可加
ROUTINE_COMMENT和DTD_IDENTIFIER(返回值类型)字段 - 该查询需有
SELECT权限,且对INFORMATION_SCHEMA表可访问
show create function 函数名 显示不全怎么办
SHOW CREATE FUNCTION func_name 是查看单个函数完整定义(含 DELIMITER、READS SQL DATA 等特性)的权威方式。但它有几个硬性前提:
- 函数必须存在于当前默认数据库中(否则报错
ERROR 1418或FUNCTION does not exist) - 当前用户必须对该函数有
EXECUTE权限(MySQL 5.7+ 默认授予创建者,但其他用户需显式授权) - 若函数定义过长(如含大段注释或复杂逻辑),
ROUTINE_DEFINITION在INFORMATION_SCHEMA中可能被截断,但SHOW CREATE FUNCTION不会
典型报错:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration... —— 这说明函数创建时没声明特性,但不影响查看,只是提示风险。
为什么 select from mysql.proc 查不到用户函数
老教程常提 SELECT name FROM mysql.proc WHERE db='your_db' AND type='FUNCTION',但这个方式在 MySQL 8.0+ 已失效:系统表 mysql.proc 被弃用,不再同步维护用户函数元数据。强行查只会返回空或旧残留记录。
如果你在 MySQL 8.0+ 上看到结果为空,不是权限或语法问题,而是底层机制变了。必须改用 INFORMATION_SCHEMA.ROUTINES 或 SHOW FUNCTION STATUS。
另外,mysql.proc 表本身需要 SELECT 权限,且普通用户默认无权访问——这也是一个容易卡住的权限盲点。