关于视图
A:在视图上使用insert语句
通过视图插入数据与直接在表中插入数据一样,但视图毕竟不是基本表.因此在进行数据插入时还是有一定的限制
1:如果视图上没有包括基本表中属性为not null[不能为空]的列,那么插入操作会因为那些列是null值而失败.
2:如果某些列因为某些规则或约束的限制而不能直接接受从视图插入的列时,插入会失败
3:如果在视图中包含了使用统计函数的结果,或是包含计算列,则插入操作会失败
4:不能在使用了distinct语句的视图中插入值
5:不能在使用了group by语句的视图中插入值
B:使用update更新视图中的数据
1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列
例如:创建以下视图:
create view del as
select 职工号,姓名,部门名称,负责人 from work1,部门
where work1.部门编号=部门.部门编号
如果再执行下面的语句时:
update del set 职工号='001',部门名称='wenda'
where 职工号='01'[出现错误]
只能够改成:
update del set 职工号='001' where 职工号='01'
update del set 部门名称='wenda' where 职工号='01'
2:不能在使用了distinct语句的视图中更新值
3:不能在使用了group by语句的视图中更新值
C:使用delete删除视图中数据.
通过视图删除数据最终体现为从基本表中删除数据
格式:delete 视图名 [where 条件]
说明:当视图由两个以上的基表构成时,不允许删除视图的数据
例如:建一个视图kk
create view kk as
select 职工号,姓名,性别,部门名称 from work1,部门 where work1.部门编号=部门.部门编号 [试着去删除]
使用with check option的视图
如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.
比如:
create view xm as
select * from work where 性别='男'
完全可以插入insert xm values('001','女',23,'2400'....)
尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.(以后对该视图插入、修改、删除操作时,会自动加上字段 性别='男' 的条件)
比如:
create view xm as
select * from work where 性别='男' with check option
使用schemabinding的视图[使用绑定到构架]
我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.
比如:
create view 基本工资 with SCHEMABINDING
as select 姓名,性别,基本工资 from dbo.work
说明:
1:不能使用“*”来创建此类型的视图
2:创建此类型的视图时,一定要加上dbo.表名.
3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定
4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.
5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.
使用with encryption对视图进行加密
为了保护创建视图定义的原代码,可以对视图进行加密.
比如:
create view kk with encryption
as select * from work where 职称='经理'
用sp_helptext来查看一下.或用企业管理器查看一下.
说明:如果应用此项用户将无法设计视图