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.使用视图的主要内容,如果未能解决你的问题,请参考以下文章