最近在删除表数据的时候报如上错误。
查看无法删除的表结构时发现。该表存在触发器。且该表的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