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

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

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


当前回答

我有同样的问题与根用户和它为我工作时,我替换

root@%

by

root@localhost

所以,如果用户'web2vi'被允许从'localhost'连接,你可以尝试:

web2vi@localhost

我远程连接到数据库了。

其他回答

一个或几个视图是由另一个用户创建/注册的。你必须检查视图的所有者,并:

重新创建用户;正如其他答案所说。 或 重新创建用户'web2vi'使用ALTER VIEW创建的视图

我曾经遇到过这个问题。

我试图迁移视图,从BD1到BD2,使用SQLYog。SQLYog在另一个数据库(DB2)中重新创建了视图,但它保留了BD1的用户(它们是不同的)。后来我意识到,我在查询中使用的视图与您的错误相同,即使我没有创建任何视图。

希望这对你有所帮助。

这种情况发生在我用MYSQL Workbench 6.3 Community在Windows 10上导入转储文件后,提示“root@%不存在”。即使用户存在。 首先,我试图注释掉DEFINER,但是,这没有工作。 然后,我用“root@localhost”替换了“root@%”上的字符串,并重新导入转储。这招对我很管用。

grant all on *.* to 'username'@'%' identified by 'password' with grant option;

例子:

grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;

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

通过运行以下注释修复。

grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;

如果你得到的是some_other而不是web2vi,那么你必须相应地改变名称。