mysql 错误1356 -访问次数

b4lqfgs4  于 2023-02-28  发布在  Mysql
关注(0)|答案(7)|浏览(195)

当我尝试创建一些,但当我调用它出现错误1356:

创建视图

CREATE VIEW monitoring_consult AS (
    SELECT 
        m.id,
        account.valor AS 'phone_number',
        IF((c.valor REGEXP '^[0-9]+$' OR c.valor IS NULL) AND cn.short_name IS NOT NULL, cn.short_name, c.valor) AS 'category',
        IF(pn.id IS NOT NULL, pn.id, p.valor) AS 'provider',
        n.valor AS 'nominal',
        m.last_page,
        pn.name AS 'provider_name',
        IF(pay.valor is null, 'Uncompleted', pay.valor) AS 'payment',
        timeEnd,
        DATE_FORMAT(m.timeEnd, '%d/%m/%Y') as 'date'
    FROM
        monitoring AS m
            LEFT JOIN feature   AS account ON m.id = account.id AND account.valor IS NOT NULL AND (account.page = 'PV') AND account.type = 'send'
            LEFT JOIN feature   AS c    ON m.id = c.id_monitoring   AND c.valor IS NOT NULL AND (c.page = 'MA' OR c.page = 'IN') AND c.type = 'select'
            LEFT JOIN feature   AS p    ON m.id = p.id_monitoring   AND p.page = 'PO' AND p.valor IS NOT NULL AND p.type = 'select'
            LEFT JOIN feature   AS n    ON m.id = n.id_monitoring   AND n.valor IS NOT NULL AND n.page = 'OAP' AND n.type = 'select'
            LEFT JOIN feature   AS pay  ON m.id = pay.id_monitoring AND m.last_page = 'OK' AND pay.type = 'userAction'  AND pay.name = 'paymentStatus' AND pay.valor = 'Completed'
            LEFT JOIN terminais AS term ON m.id_terminal = term.id
            LEFT JOIN provider  AS pn   ON (p.valor = pn.id) OR (c.valor REGEXP '^[0-9]+$' AND c.valor = pn.id)
            LEFT JOIN category  AS cn   ON pn.id_category = cn.id
        group by m.id
        having category is not null
)

调用视图:

select * from monitoring_consult

返回:

Error Code: 1356. View 'qiwi.monitoring_consult' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them

Mysql版本- 5.5.32-日志
有人知道为什么会这样吗?

bd1hkmkf

bd1hkmkf1#

每次我导入一个mysqldump导出时都会遇到这个特殊的问题,其中包含自动视图创建,
出现这样的问题是因为在mysqldump中创建视图(当您再次重新导入时),使用“SQL安全定义符”,
我不知道这是否是一个mysql的错误,但对我来说,删除和应用新的权限的看法,并没有解决问题,重新创建视图没有“SQL安全定义符”,解决我的问题,我希望这是你的情况。
再见

ddrv8njm

ddrv8njm2#

这些是

  1. MySQL登录用户没有查看monitoring_consult视图的权限
    1.任何连接表都不存在
    1.您尝试获取的任何字段不存在(您可能已被删除)
baubqpgj

baubqpgj3#

我得到了相同的错误代码,并能够在一定程度上确定它。它似乎出现时,一个对象两个(或更多?)级以下不再可用。这里是一些代码来重现这个问题。

create table `table1` (`id` int(11), `col1` varchar(16);
insert into `table1` (`id`, `col1`) values (1, 'Foo'), (2, 'Bar');

create view `view_sub` as SELECT `id`, `col1` from `table1`;
# if you drop here you'll get error code 1146: table1 doesn't exist

create view `view_err` as SELECT `id`, `col1` from `view_sub`;
drop table `table1`;

select * from `view_err`
# should get you error code 1356: references invalid table(s), etc

我不知道from子句中是否有视图,但terminais的(似乎是)拼写错误可能导致了它。

yqhsw0fo

yqhsw0fo4#

创建视图时,尝试指定如下定义符:

CREATE 
    ALGORITHM = UNDEFINED 
    DEFINER = `user`@`%` 
    SQL SECURITY DEFINER
VIEW `monitoring_consult` AS ...

其中DEFINER user必须对链接到视图的任何表具有适当的权限

5cnsuln7

5cnsuln75#

你好,我得到了这个错误后,改变我的数据库模型。碰巧是一个现有的视图引用不存在的字段。
因此,解决方案是删除当前视图并创建一个新视图,考虑新模型而不是关注用户权限。
希望对某人有帮助:)

dffbzjpn

dffbzjpn6#

我遇到了同样的问题,但我仍然不知道是什么导致了这个问题,因为视图使用的表都没有被更改。
我的解决方案是删除旧视图并创建一个新视图,这次我在视图的顶部指定了以下内容。

use databasename;
knpiaxh1

knpiaxh17#

这个消息有时会引起误解。我得到了同样的警告,尽管我已经确保定义者用户有正确的权限,并且所有引用的表/字段都是正确的。
运行后

show create view viewName;

我注意到输出包含1 warning,因此在此之后我运行

show warnings;

这让我看到了真正的问题所在。

相关问题