mysql:MySQL error 1449: The user specified as a definer does not exist

最近在删除表数据的时候报如上错误。

查看无法删除的表结构时发现。该表存在触发器。且该表的definer--即创建表触发器的用户并不存在。

进而导致的标题所示的问题。

目前查到的解决方法,比较靠谱的有两个:

1. 创建触发器所需要的用户。

2. 删除触发器并重新创建。

过程如下:

SELECT CONCAT("DROP TRIGGER ", 
trigger_name, ";", 
" CREATE TRIGGER ", TRIGGER_NAME, 
" AFTER ", EVENT_MANIPULATION, 
" ON ", EVENT_OBJECT_SCHEMA, ".", EVENT_OBJECT_TABLE, 
" FOR EACH ROW ", ACTION_STATEMENT, ";") 
AS sqlCommand,definer
 FROM information_schema.triggers 
 WHERE EVENT_OBJECT_SCHEMA = "{数据库名}";

将上述sql的数据库名称改为需要修改的数据库名。

完了会列出该数据库中存在的所有触发器。

将本地数据不存在的definer对应的sqlCommand复制出来重新执行即可。

当然也可以对该sql进行优化,关联查询mysql.user。筛选出本地不存在的definer关联的触发器的语句。

 

总结:

出现标题所示问题一般是由于导库或者导表的时候,创建表结构的definer本地不存在所导致的。

参照:

https://stackoverflow.com/questions/18593746/how-to-bulk-change-mysql-triggers-definer

https://stackoverflow.com/questions/10169960/mysql-error-1449-the-user-specified-as-a-definer-does-not-exist

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值