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

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

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


当前回答

我的5美分。

当我试图从视图中选择时,我也犯了同样的错误。

然而,问题似乎是这个视图,选择从另一个视图,从备份从不同的服务器恢复。

事实上,是的,用户是无效的,但从第一眼看不清楚在哪里。

其他回答

问题很明显——MySQL无法找到指定为定义器的用户。

在从开发服务器同步数据库模型,将其应用到localhost,对模型进行更改,然后将其重新应用到localhost之后,我遇到了这个问题。显然有一个视图(我修改)定义,所以我不能更新我的本地版本。

如何修复(很容易):

注意:它涉及到删除,所以它对视图工作得很好,但如果你在表上尝试这样做,请确保你有数据备份。

以根用户身份登录数据库(或任何有足够权限进行更改的用户)。 删除视图,表或任何你有问题的东西。 同步你的新模型——它不会抱怨现在不存在的东西。您可能希望从有问题的项定义中删除SQL SECURITY DEFINER部分。

附注:这既不是一个合适的也不是最好的解决方案。我只是把它作为一个可能的(非常简单的)解决方案发布出来。

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

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

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

这个错误已经被修复:

mysql_upgrade -u root

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

数据库用户似乎也是区分大小写的,所以虽然我有一个root'@'%用户,但我没有root'@'%用户。我通过工作台将用户更改为大写,问题解决了!