在触发器导致在视图中使用的表上插入后,如何进行MYSQL视图更新

在触发器导致在视图中使用的表上插入后,如何进行MYSQL视图更新,mysql,sql,triggers,views,Mysql,Sql,Triggers,Views,我有一个基于触发器插入的MYSQL表,我有一个使用该表的视图(和其他表的连接)。当我的触发器触发并插入新行时,它会在表中正常显示,但视图不会更新。是否有一种方法可以更新视图,或者这是触发器的限制 注意:表中的常规插入会很好地更新视图,视图中只缺少来自触发器的插入 提前感谢。来自(我强调): 视图定义在创建时“冻结”,因此更改为 基础表不影响视图定义。对于 例如,如果视图在表上定义为SELECT*,新建列 以后添加到表中的内容不会成为视图的一部分 因此,您的触发代码应该包括alterview语句(

我有一个基于触发器插入的MYSQL表,我有一个使用该表的视图(和其他表的连接)。当我的触发器触发并插入新行时,它会在表中正常显示,但视图不会更新。是否有一种方法可以更新视图,或者这是触发器的限制

注意:表中的常规插入会很好地更新视图,视图中只缺少来自触发器的插入

提前感谢。

来自(我强调):

视图定义在创建时“冻结”,因此更改为 基础表不影响视图定义。对于 例如,如果视图在表上定义为SELECT*,新建列 以后添加到表中的内容不会成为视图的一部分

因此,您的触发代码应该包括
alterview
语句(如果您完全确定该视图存在)或
CREATE或REPLACE
(如果您不确定)


有关
MySQL视图的更多信息
(与当前问题无关)请参阅。

结果表明,问题在于我用来创建视图的连接-我在字段上有内部连接,这些字段在从触发器插入时仅为空。我将它们切换为左连接,现在无论插入是否来自触发器,视图都会很好地更新


另外,@PM-77-1的回答是正确的,但在本例中,我没有更改任何列,只是插入了新的数据行。

视图不需要“更新”,但物化视图需要。但是,MySQL不支持物化视图。这让我相信,您实际上不是在谈论视图,而是指曾经由查询填充的表?@BrianDeMilia by view我指的是当您运行
create或replace view some\u name as select…
时创建的内容。我也对此感到困惑,因为我认为视图也不需要更新,但在这种情况下,我认为这可能是触发器的结果,因为在表中定期插入视图可以很好地更新视图。在该视图中针对数据库执行select语句时会发生什么?它返回行吗?如果不是,那么与其他表的内部联接可能会将其从结果集中删除,这就是为什么视图不会显示它(因为它与查询相同)。在这种情况下,可能触发器应该在其他表中插入额外的内容。这是我学到的新东西。我不认为“冻结”这个概念同样适用于Oracle。不正确。“编译”视图是创建视图的关键。然后,列处于静态状态,直到视图被“创建或替换”更改。您可以将几十个字段添加到相关的表中,它们不会神奇地出现在您的视图中。使用
select*
并不能保证“自动添加字段”。只需创建员工表的视图,然后有人将“
是冗余的”
添加到表中。是否应该自动显示在employee表的所有视图中?(不!)已经被你用过了-我很困惑。究竟什么是“不正确”?你刚才重申了我的回答。我看不出有什么矛盾。就
SELECT*
而言,MySQL文档的作者只是为了澄清这一点;提到
我不认为“冻结”的相同概念适用于Oracle,尽管
是不正确的。它确实适用于Oracle视图,尽管该术语尚未正式使用。我想说的是,Oracle的视图在创建/更新时也是“编译”的,不会自动包含新列。这可能是表达得太差了。对不起,请接受你自己的答案。在这次特别的讨论中,我的的确是离题了。