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

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

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


当前回答

我已经尝试了上面的方法,但在创建视图时感觉像是重复的操作。我在更新导入数据库的视图时遇到了同样的问题。

您可以在LOCAL中简单地通过创建具有create权限的User来解决这个问题。

其他回答

创建被删除的用户,如下所示:

mysql> create user 'web2vi';

or

mysql> create user 'web2vi'@'%';

试试这个 这是一个简单的解决方案

mysql -u root -p
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

更多信息请访问https://stackoverflow.com/a/42183702/5407056

我来这里是为了同样的问题,我在我的代码中找不到某个用户正在进行操作的任何地方。 显然,这是从一个触发器,正在使用一个用户被删除了很长时间(db是从一个旧版本恢复) 所以,如果你像我一样感到困惑,看看你的db事件/触发器/例程。 希望这能帮助到一些人。

用户web2vi在你的mysql服务器上不存在。

看到http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html error_er_no_such_user

如果该用户确实存在,检查它可以从哪些服务器访问,尽管我认为这将是一个不同的错误(例如,您可能有web2vi@localhost,但您正在以web2vi@%(在任何地方)访问数据库)

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

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

我曾经遇到过这个问题。

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

希望这对你有所帮助。