SQL SERVER 从入门到精通 第5版 第二篇 第9章 视图的使用 读书笔记

 

 第9章 视图的使用

  视图是一种常用 的数据库对象,它将查询的结果以虚拟表的形式存储在数据中,视图并不在数据库中以存储数据集的形式存在.视图的结构和内容是建立在对表的查询基础之上的,和表一样包括行和列,这些行,列数据都来源于其所引用的表,并且是在引用视图过程中动态生成的.

  视图的内容是由查询定义的,并且视图和查询都是通过SQL语句定义的,它们 有着这么多相同和不同之处,具体如下:

    >.存储.视图存储为数据库设计的一部分,而查询不是.视图可以禁止所有用户访问数据库中的基表,而要求用户只能通过视图操作数据.这种方法可以保护用户和应用程序不受某些数据库修改的影响,同样也可以保护数据表的安全性.

    >.排序:可以排序任何查询结果,但是只有当视图包括TOP子句时才能排序视图.

    >.加密:可以加密视图,但不能加密查询.

  >.视图的分类与操作.

  视图分为3类:

    >.标准视图.保存在数据库中的SELECT查询语句,即通常意义上理解的视图.

    >.索引视图:创建有索引的视图称为索引视图.它经过计算并存储自己的数据,可以提高某些类型查询的性能,尤其适用于聚合这么多行的查询,但不太适用于经常更新的基本数据集.

    >.分区视图:是在一台或多台服务器间水平连接一组表中的分区数据,以使数据看上去来自一个表.

  >.以界面方式操作视图.  

 在视图设计器界面中完成视图的设置,按保存键可以保存视图

    >.视图的删除.

    在左边视图目录里右键删除即可.

   >.使用SQL语句操作视图 
--创建视图可以通过 CREATE VIEW 语句实现,该语句会将一个查询的结果保存为一个虚拟的表,方便后续查询和操作。
-- 创建一个名为CustomerSummary的视图,显示顾客和他们的订单数量
CREATE VIEW CustomerSummary AS
SELECT c.CustomerID, c.CustomerName, COUNT(o.OrderID) AS OrderCount
FROM Customers c
LEFT JOIN Orders o ON c.CustomerID = o.CustomerID
GROUP BY c.CustomerID, c.CustomerName;

-- 查看新创建的视图内容
SELECT * FROM CustomerSummary;

--修改视图通常涉及更新视图的查询逻辑或字段,可以使用 ALTER VIEW 语句。直白的说就是修改SQL语句
--如果原来的视图定义是用WITH ENCRYPTION 或CHECK OPTION创建的,那么只有在ALTER VIEW中也包含这些选项时,这些选项才有效
-- 修改CustomerSummary视图,增加顾客的联系方式 ALTER VIEW CustomerSummary AS SELECT c.CustomerID, c.CustomerName, c.ContactPhone, COUNT(o.OrderID) AS OrderCount FROM Customers c LEFT JOIN Orders o ON c.CustomerID = o.CustomerID GROUP BY c.CustomerID, c.CustomerName, c.ContactPhone; --删除视图可以使用 DROP VIEW 语句。 -- 删除名为CustomerSummary的视图 DROP VIEW CustomerSummary; --SQL中使用SP_RENAME可以对视图进行重命名. exec sp_rename old_view,new_view

使用UPDATE,DELETE,INSERT修改视图里的数据会直接影响引用表

UPDATE v1 SET sclass=5 WHERE id=1;
DELETE v1 WHERE id=6;
SELECT * FROM v1;
SELECT * FROM dbo.student;

   >.浏览视图中的数据.

当视图内涉及多张表或包含子查询时,是否可以执行增删改操作取决于视图的定义和数据库管理系统的支持情况。

可以执行增删改操作的情况:

  1.如果视图的定义是基于单张表,并且不包含聚合函数、GROUP BY 子句等,则通常可以执行插入、更新和删除操作。此时,操作的是视图所涉及的单张表。
  2.如果视图的定义是基于多张表的连接,并且连接条件能够唯一确定被修改的行,也可以执行增删改操作。在这种情况下,操作的是连接后的虚拟表,而不是视图所涉及的具体表。
  3.一些数据库管理系统可能支持对包含子查询的视图进行增删改操作,前提是子查询返回的结果集是可更新的。
无法执行增删改操作的情况:

  1.如果视图的定义涉及了多张表,并且不满足能够唯一确定被修改的行的条件,则通常无法执行增删改操作。
  2.如果视图的定义包含了聚合函数、GROUP BY 子句、DISTINCT 关键字等,通常也无法执行增删改操作,因为这些操作会导致视图不可更新。
总的来说,对视图进行增删改操作需要满足一定的条件,包括视图的定义、涉及的表以及数据库管理系统的支持情况。在使用视图进行数据操作时,建议先仔细了解视图的定义和数据库管理系统的限制,以确保操作的有效性。

 

posted @ 2024-04-10 21:03  一曲轻扬  阅读(24)  评论(0编辑  收藏  举报