300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > The user specified as a definer (‘skip-grants user‘@‘skip-grants host‘) does not exist

The user specified as a definer (‘skip-grants user‘@‘skip-grants host‘) does not exist

时间:2024-07-15 08:22:48

相关推荐

The user specified as a definer (‘skip-grants user‘@‘skip-grants host‘) does not exist

问题的出现

问题是在我插入数据时发生的。在我插入数据时发生了如下错误:

The user specified as a definer (‘skip-grants user‘@‘skip-grants host‘) does not exist

大意是定义者‘skip-grants user‘@‘skip-grants host‘不存在,可是我从来都没有定义过此用户,更何况用它来创建表了。

问题的原因

网上的解决方法大多是新生成一个‘skip-grants user‘@‘skip-grants host‘用户,如此解决并没有说明此问题的原因。突发奇想,此表是我使用source导入,现在我将其使用mysqldump命令导出。再进行查找,果真发现了此用户

原来被/*!*/包裹并非是注释,在mysql的source执行中会被当做元数据执行。如此,此问题原因是发生在定义触发器时所赋予的用户在我本地的mysql中不存在导致。而触发器恰好是在Insert执行后调用,所以会在插入后出现此问题。

问题的解决

删除掉原有的触发器,重新创建。

总结

这个问题非常具有迷惑性,之前我以为是表的定义者和用户不一样导致的,最终的结果却是触发器的原因。经此一乌龙发现mysql的表是没有定义者一说的,只有触发器才会出现此问题,为何这样说,让我们打开information_schema.TABLES,你就能发现根本没有DEFINER(定义者)这个字段,而TRIGGER(触发器)存在。

select `DEFINER` from information_schema.`TABLES`;

select `DEFINER` from information_schema.`TRIGGERS`;

除了触发器,表内的主键外键索引也没有定义者一说,导出的SQL和information_schema数据库也能证明这一观点。

所以,出现这个问题就直接看看有没有定义的触发器吧!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。