在视图上的触发器上插入功能
Posted
技术标签:
【中文标题】在视图上的触发器上插入功能【英文标题】:Insert Functionality on Trigger on a View 【发布时间】:2020-02-08 15:38:51 【问题描述】:我正在尝试在视图上创建触发器,当将行插入视图时,该触发器会使用插入的设置值更新不同的表。
我有以下表格:
Create Table test1
(
Label varchar(255)
);
Create view test1view
as select * from test1
Create Table test2
(
Label2 varchar(255)
)
然后我尝试使用以下触发器来执行此操作:
Create Trigger testtrigger
on Test1View
Instead of Insert
AS
Insert Into test2
(Label2)
Select Label From Inserted
我正在测试的插入函数:
Insert Into test1 (Label)
VALUES ('1')
然而这并没有奏效。我没有收到任何错误,它根本没有填充 test2 表。
你能建议吗?
【问题讨论】:
你有什么“没用”的?有错误吗?你得到什么行为?insert
语句是什么样的?
@GordonLinoff 我已经更新了原来的问题。
【参考方案1】:
这回答了问题的原始版本。
您需要插入到 VIEW 中才能使触发器工作:
Insert Into test1View (Label)
VALUES ('1');
Here 是一个 dbfiddle。
或者,您可以将触发器放在基表上。
【讨论】:
不幸的是,有一个限制导致我无法将触发器应用于基表。插入功能也是一个自动化的部分,不是我可以控制的。有没有办法解决这个问题? @Revokez 。 . .您需要插入到具有触发器的实体中。这很简单。编写正确的插入或将触发器放在要插入的表上。 我已经解释过,由于我概述的限制,您建议的解决方案将不起作用。所以不幸的是,你的建议在这里没有帮助。 @Revokez 。 . .而且我想指出,这是对您问题的正确答案,即使您的环境中存在不让您实施它的陌生感。 @Revokez 。 . . (1) 修改问题会使我的答案无效,我认为这很粗鲁(它会引起反对票)。 (2) 你不能做你想做的事。您不能插入一个实体并在另一个实体上触发某些东西。这不是数据库的工作方式。以上是关于在视图上的触发器上插入功能的主要内容,如果未能解决你的问题,请参考以下文章
触发器导致在视图中使用的表上插入后,如何进行 MYSQL 视图更新