数据库视图(二)

来源:互联网 发布:成都网络推广营销 编辑:程序博客网 时间:2024/05/20 17:09

 B:使用update更新视图中的数据

  1:更新视图与更新表格一样,但是在视图中使用了多个基本表连接的情况下,每次更新操作只能更新来自基本表的一个数据列

  例如:创建以下视图:

create view del asselect 职工号,姓名,部门名称,负责人 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 asselect 职工号,姓名,性别,部门名称 from work1,部门 where work1.部门编号=部门.部门编号 [试着去删除]

  使用with check option的视图

  如果不了解视图定义内容,则常常会发生向视图中输入不符合视图定义的数据的情况.

  比如:

create view xm asselect * from work where 性别=\'男\'

  完全可以插入insert xm values(\'001\',\'女\',23,\'2400\'....)

  尽管从意义上来说是不合理的,但是上述语句是正确的.为了防止这种情况的发生,可以使用with check option子句来对插入的或更改的数据进行限制.

  比如:

create view xm asselect * from work where 性别=\'男\' with check option

  使用schemabinding的视图[使用绑定到构架]

  我们知道视图是依赖于表,如果在一个表中创建一个视图,今后如果这个表被删除了,则这个视图将不可再用了.为了防止用户删除一个有视图在引用的表,可以在创建视图的时候加上schemabinding关键字.

  比如:

create view 基本工资 with SCHEMABINDINGas select 姓名,性别,基本工资 from dbo.work

  说明:

  1:不能使用“*”来创建此类型的视图

  2:创建此类型的视图时,一定要加上dbo.表名.

  3:如果在某个表中定义了此类视图,则用户将不能对表的结构进行修改,否则会删除这些绑定

  4:如果用户对表的结构进行列改名,则会删除绑定而且视图不可用.

  5:如果用户对表的结构进行列的类型或者大小修改,则会删除绑定但视图可用,此时用户可以删除视图所引用的表.
   
  使用with encryption对视图进行加密

  为了保护创建视图定义的原代码,可以对视图进行加密.

  比如:

create view kk with encryptionas select * from work where 职称=\'经理\'

  用sp_helptext来查看一下.或用企业管理器查看一下.

  说明:如果应用此项用户将无法设计视图

  使用视图加强数据的安全

  一般通过使用视图共有三种途径加强数据的安全性 

  A:对不同用户授予不同的使用权.

  B:通过使用select子句限制用户对某些底层基表的列的访问

  C:通过使用where子句限制用户对某些底层基表的行的访问, 对不同用户授予不同的权限

原创粉丝点击