# MySQL 8.0 出现 The user specified as a definer does not exist 解决方案
直接说结论:但凡是MySQL,但凡出现此问题,一定就是导入数据库的时候**definer字段中出现了系统不存在的用户(如`root@%`,系统里可能只有`root@localhost`)**,含有definer字段的结构通常为以下几种:
- 视图(View)
- 函数(Function)
- 存储过程(Procedure)
- 触发器(Trigger)
在命令行里可以通过`show triggers;`命令直接看到触发器的definer字段,而视图和存储过程通过命令行不太方便查看,可以通过GUI工具。
查找到问题的根源后,接下来要做的就是见招拆招。这些结构一般是较难修改的(或完全没有提供修改功能的),只能删除后重建一个同名的,并重新指定definer。
另外,这里有[关于Definer的详细介绍](https://blog.csdn.net/wangkun_j/article/details/119536389)
---
额外记:网上现有的几种方案,大多数可以根据自己的业务进行合理尝试。唯独下面两种方案是不可行的:
1. 修改`mysql.proc`表。这种方法不可行是因为MySQL 8.0已经没这个表了,他只适用于MySQL 5.x。
2. 缺啥补啥,把提示不存在的那个用户创建出来。这种方法如果操作不当对数据库安全性的损害是不可估量的,比如新建 \`root\`@\`%` 用户就是纯粹的脑瘫行为。