SHOW FUNCTION STATUS仅显示当前USE切换的数据库中的自定义函数,结果含函数名、类型、创建者、时间等元数据,但不包含函数体;需先USE目标库,否则返回空。
直接执行 SHOW FUNCTION STATUS,它只列出当前默认数据库(即你 USE db_name 切换进去的那个库)里的自定义函数,不跨库。结果包含函数名、类型、创建者、修改时间、安全特性等,但不显示函数体或 SQL 定义。
常见误操作:没先 USE your_db 就运行,结果返回空——因为默认在 information_schema 或 mysql 系统库下,而这些库没有你的自定义函数。
USE your_database_name
LIKE 'pattern' 可模糊过滤,比如 SHOW FUNCTION STATUS LIKE 'get_%'
这是最可靠的方式,能跨库查询,且返回函数定义原文。关键点在于 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 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 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 权限,且普通用户默认无权访问——这也是一个容易卡住的权限盲点。
Tplink企业版路由器WiFi名称的默认设置介绍(Tplink企业版路由器WiFi名称的默认设置是什么)
Tplink路由器灯常亮无法上网的原因分析(如何解决Tplink路由器灯常亮无法上网的问题)
Tplink千兆企业级路由器自动重启的作用和优势介绍(如何设置Tplink千兆企业级路由器自动重启功能)
一根天线的tplink路由器有哪些(一根天线的Tplink路由器的特点和优势介绍)
tplink路由器外网访问不了nas(Tplink路由器外网访问NAS的原因分析)
Tplink无法搜到路由器的原因分析(如何解决Tplink无法搜到路由器的问题)