当我运行以下查询时,我得到一个错误:

SELECT
  `a`.`sl_id`                     AS `sl_id`,
  `a`.`quote_id`                  AS `quote_id`,
  `a`.`sl_date`                   AS `sl_date`,
  `a`.`sl_type`                   AS `sl_type`,
  `a`.`sl_status`                 AS `sl_status`,
  `b`.`client_id`                 AS `client_id`,
  `b`.`business`                  AS `business`,
  `b`.`affaire_type`              AS `affaire_type`,
  `b`.`quotation_date`            AS `quotation_date`,
  `b`.`total_sale_price_with_tax` AS `total_sale_price_with_tax`,
  `b`.`STATUS`                    AS `status`,
  `b`.`customer_name`             AS `customer_name`
FROM `tbl_supplier_list` `a`
  LEFT JOIN `view_quotes` `b`
    ON (`b`.`quote_id` = `a`.`quote_id`)
LIMIT 0, 30

错误信息是:

#1449 - The user specified as a definer ('web2vi'@'%') does not exist

为什么会出现这个错误?我该怎么解决呢?


当前回答

解决方案只是一个单行查询如下:

grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;

将ROOT替换为mysql用户名。 将PASSWORD替换为mysql密码。

其他回答

进入编辑例程部分,并在底部将Security Type从Definer更改为Invoker。

最初创建SQL视图或过程的用户已被删除。如果您重新创建该用户,它应该可以解决您的错误。

您可以创建名为web2vi的用户,并授予所有权限

我在更新mysql后得到了同样的错误。

这个错误已经被修复:

mysql_upgrade -u root

mysql_upgrade应该在每次升级MySQL时执行。它 方法检查所有数据库中的所有表是否与 MySQL服务器的当前版本。如果一个表被发现有 可能的不兼容性,它被检查。如果发现任何问题, 桌子修好了。Mysql_upgrade也升级系统表 这样你就可以利用新的特权或能力 可能是加进去的。

为什么会出现这个错误?我该怎么解决呢?

我花了一个小时才对这样的问题做出决定。但是,在我的例子中,我运行了这个:

mysql> UPDATE `users` SET `somefield` = 1 WHERE `user_id` = 2;
ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist

如果你真的想找到问题,只需要逐个运行这些命令:

SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
SHOW TRIGGERS;
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';

...然后,在每个字段之后,查找字段'definer'。

在我的例子中,它是一个老旧的触发器,某个开发人员忘记删除了。