SQL.使用视图

Posted

技术标签:

【中文标题】SQL.使用视图【英文标题】:SQL.Working with views 【发布时间】:2014-03-18 07:02:30 【问题描述】:

我有一张“商品”表,其中包含有关商品的不同信息(名称、价格等)。我需要以与表“商品”相同的方案创建一个视图。但是视图必须是空的。当用户向视图添加新商品时,它会保存在“商品”表中,但当用户下次打开时,该视图仍为空。所以主要思想是不向有权访问视图的用户显示现有数据。

【问题讨论】:

只有当相关表为空时,视图才能为空 为什么不授予他们INSERT 权限,但不授予他们SELECT,在桌子本身上,然后完成它? @Damien_The_Unbeliever,我想过,但这是我的任务,我无法改变。我应该使用什么?插入触发器后删除? 您使用的是什么数据库系统(例如 SQL Server、mysql、Oracle 等)?请编辑您的标签并将其添加为其中之一。这将是特定于 RDBMS 的。 @Damien_The_Unbeliever,SQL Server 管理工作室 【参考方案1】:

假设您使用的数据库系统支持 SQL Server 的 CHECK OPTION 之类的概念,并且您可以创建一个 没有 设置该选项的视图,您应该没问题:

create table T (ID int not null)
go
create view V
as
    select * from T where 1=0
go
select * from V
go
insert into V(ID) values (10)
go
select * from V
go
select * from T

V 中的两个选择返回 0 行。从T 中选择返回一行:

ID
----
10

CHECK OPTION:

强制针对视图执行的所有数据修改语句遵循 select_statement 中设置的条件。当通过视图修改行时,WITH CHECK OPTION 确保数据在提交修改后通过视图保持可见。

而您想要相反 - 您希望允许通过视图执行数据修改以创建通过视图不可见的行。

【讨论】:

【参考方案2】:

创建带有“插入触发器”的表 Goods1,它可以插入到 Goods 中并从 Goods1 中删除

【讨论】:

【参考方案3】:

据我所知,这是不可能的。视图的全部观点是它是一个表或表组的视图,即。它必须显示与视图匹配的数据。

http://www.w3schools.com/sql/sql_view.asp

您可以做的是创建另一个名为 GoodsView 的表,并向其添加一个触发器以插入到 Goods 表中,然后从 GoodsView 中删除。

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Fsqlp%2Frbafysqltrig.htm

【讨论】:

有可能。您只需要您的数据库系统支持能够通过视图进行更改,然后通过该视图不可见

以上是关于SQL.使用视图的主要内容,如果未能解决你的问题,请参考以下文章

SQL.使用视图

8. SQL——视图

8. SQL——视图

关于SQL视图的创建和使用方法

SQL 使用临时表创建视图

使用参数创建 SQL 视图