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数据库也能证明这一观点。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值