SQL 之 视图(二)

一、创建视图

1. 通过sql语句

CREATE VIEW 视图名 AS

SELECT语句

(1)可以创建包含一个列或者多个列,一个表或者多个表的视图。

(2)在创建视图时,并非所有的select子查询都可用,如:computecompute by,order by[除非与top一起连用]。但在查询时可以使用。

(3)在视图创建时,必须为没有标题列指定标题。

(4)WITH CHECK OPTIONCREATE VIEW语句的一个可选项。WITH CHECK OPTION用于保证所有的 UPDATEINSERT语句都满足视图定义中的条件。如果不能满足这些条件,UPDATEINSERT就会返回错误。

 

示例:

CREATE VIEW CUSTOMERS_VIEW AS

SELECT name, age

FROM  CUSTOMERS

WHERE age IS NOT NULL

WITH CHECK OPTION;

这里 WITH CHECK OPTION 使得视图拒绝任何 AGE字段为 NULL的条目,因为视图的定义中,AGE字段不能为空。

 

查询:

SELECT *

FROM CUSTOMERS_VIEW 

ORDER BY age;

 如果在创建时定义了别名,则引用视图时不能再引用最初的列名。如果别名含有空格,则需要使用方括号[]将列名括起来。

2. 通过SQL Server的企业管理器创建

参考:http://blog.sina.com.cn/s/blog_9ecbdda10101jt9b.html

 

 

二、删除视图

DROP VIEW view_name;

说明:与删除表不同的是,删除视图后只是删除了视图了定义,并没有删除表中的数据.[查看相关性]

 

三、更新视图

示例:

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'

 

说明了更新视图的一些限制:

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

(2)不能在使用了DISTINCT语句的视图中更新值;

(3)不能在使用了GROUP BYHAVING关键字的语句的视图中更新值;

(4)SELECT子句不能包含 ORDER BY子句;

(5)计算得出的列不能更新;

 

四、修改视图

(1)修改定义

       ALTER VIEW 视图名 AS 新的SELECT语句

(2)删除视图的行

DELETE FROM ViewName [WHERE Condition]

DELETE FROM CUSTOMERS_VIEW

      WHERE age = 22;

通过视图删除数据最终体现为从基本表中删除数据。

PS:当视图由两个以上的基表构成时,不允许删除视图的数据。

(3)向视图插入新行

可以向视图中插入新行,其规则同(使用 UPDATE 命令)更新视图所遵循的规则相同。

PS:如果视图没有包含原始数据表中所有NOT NULL 的列,则不能向该视图中添加新行。否则就可以像在数据表中插入新行一样,向视图中插入新行。

 

(4)使用WITH CHECK OPTION

       如果如下定义视图:

CREATE VIEW MaleWorker AS

SELECT *

FROM Work

WHERE Gender = Male

 

是允许插入不合理的数据的:INSERT MaleWorker VALUES(001,Female,20,3000)

使用WITH CHECK OPTION可以防止这种情况:

CREATE VIEW MaleWorker AS

SELECT *

FROM Work

WHERE Gender = Male

WITH CHECK OPTION

 

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

 

 

 

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

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

 

CREATE VIEW View_Salary WITH SCHEMABINDING AS

SELECT Name,

Gender,

Salary

FROM dbo.work

 

说明:

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

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

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

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

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

 

六、使用with encryption对视图进行加密

 

CREATE VIEW View_Encryp WITH ENCRYPTION AS

SELECT *

FROM Work

WHERE Title = Manager

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值