SQL Server从入门到项目实践(超值版)读书笔记 23
第三篇 核心应用篇
在本章中,将通过案例示范学习SQL Server数据库的一些核心应用。
例如,SQL Server视图的使用、游标的应用、存储过程的应用、索引的应用、触发器的应用、SQL Server事务与锁的应用等。
学完本篇,读者将对SQL Server数据库的管理、操作以及使用SQL Server数据库进行综合性应用具有一定的能力。
第10章 视图的使用
🎉学习指引
视图是一种常用的数据库对象,它将查询的结果以虚拟表的形式存储在数据库中,而并不在数据库中以存储数据集的形式存在。
本章就来介绍视图的使用,主要内容包括视图概述,视图分类与操作,通过视图操作数据等。
10.1 认识什么是视图
视图中的内容是由查询定义来的,并且视图和查询都是通过SQL语句来定义的,他的行为与表非常相似,但视图是一个虚拟表。
在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE语句修改记录。对于视图的操作最终将转换为基本数据表的操作。视图不仅可以方便用户操作,而且可以保障数据库系统的安全。
在SQL Server中,视图可以分为三类,分别是:标准视图、索引视图和分区视图。
10.1.1标准视图
标准视图组合了一张或多张表中的数据,可以获得使用视图的大多数好处,包括将重点放在特定数据上及简化数据操作。
10.1.2 索引视图
索引视图时被具化了的视图,即它已经过计算并存储。可以为视图创建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某些类型查询的性能。索引视图尤其适于聚合许多行的查询,但它们不太适合与经常更新的基本数据集。
10.1.3 分区视图
分区视图在一台或多台服务器间水平连接一组成员表中的分区数据。这样,数据看上去如同来自于一张表。连接同一个SQL Server实例中的成员表的视图是一个本地分区视图。
10.2 使用SQL语句操作视图
视图的结构和内容是建立在对表的查询基础之上的,与表一样包括行与列,这些行列数据都来源于其所引用的表,并且是在引用视图过程中动态生成的。
本小节就来介绍使用SQL语句操作视图的步骤。
10.2.1 使用CREATE VIEW语句创建视图
语法如下:
CREATE VIEW [schema_name.] view_name [column_list]
AS select_statement
[WITH CHECK OPTION]
[ENCRYPTION]
主要参数说明:
- schema_name:视图所属架构的名称
- view_name:视图的名称。视图名称必须符合有关标识符的规则。可以选择是否指定视图所有者名称。
- column_list:视图中各个列使用的名称
- AS:指定视图要执行的操作
- select_statement:定义视图的SELECT语句。该语句可以使用多张表和其他视图。
- WITH CHECK OPTION:强制针对视图执行的所有数据修改语句,都必须符合在select_statement中设置的条件。通过视图修改行时,WITH CHECK OPTION可确保提交修改后,仍可通过视图看到数据。
- ENCRYPTION:对创建视图的语句加密。该项可选。
📢注意:
视图定义中的SELECT子句不能包括下列内容:
(1)COMPUTE或COMPUTE BY子句。
(2)ORDER BY子句,除非在SELECT语句的选择列表中也有一个TOP子句。
(3)INTO关键字。
(4)OPTION子句。
(5)引用临时表或表变量。
💡提示:ORDER BY子句仅用于确定视图定义中的TOP子句返回的行,ORDER BY不保证在查询视图时得到有序结果,除非在查询本身中也指定了ORDER BY。
例:在数据库mydatabase中的employee数据表上创建一个名为view_emp的视图,用于查看员工的编号、姓名、当前职位,SQL语句如下:
CREATE VIEW view_emp AS
SELECT code 员工编号,name 员工姓名,job 职务
FROM employee
从结果看出,视图view_emp中查询的内容与基本表中是一样的,这里的view_emp中包含三列。
例:创建一个名为view_info的视图,用于查看员工的姓名、职务、部门名称及工资
CREATE VIEW view_info AS
SELECT a.name,a.job,b.deptname,a.salary
FROM employee a,dept b
WHERE a.deptcode=b.deptid
通过创建视图来查询数据,可以很好地保护基本表中的数据。
10.2.2 使用ALTER VIEW语句修改视图
当视图创建完成后,如果觉得有些地方不能满足需要,可以修改视图,而不必再重新创建。
修改视图的语法如下:
ALTER VIEW [schema_name] view_name [column_list]
AS select_statement
[WITH CHECK OPTION]
[ENCRYPTION]
💡从语法中可以看出,修改视图就只是把创建视图的CREATE关键字替换为ALTER关键字,其他不变。
例:修改名为view_info的视图,用于查看员工编号、姓名、当前职位、所在部门以及基本工资。
ALTER VIEW view_info AS
SELECT a.code,a.name,a.job,b.deptname,a.salary
FROM employee a,dept b
WHERE a.deptcode=b.deptid
另外,使用系统存储过程sp_rename可以为视图进行重命名操作
例:重命名视图view_info为view_info_01
sp_rename 'view_info','view_info_01'
📢注意:
从结果中发现,在对视图进行重命名后,会给使用该视图的程序造成一定的影响。因此,在为视图重命名前,要先知道是否有一些其他数据库对象使用该视图名称,在确保不会对其他对象造成影响后,再对其进行重命名操作。
10.2.3 使用DROP VIEW语句删除视图
数据库中的任何对象都会占用数据库的存储空间,视图也不例外。当视图不再使用时,要及时删除。
使用DROP语句
DROP VIEW[schema_name] view_name1,view_name2,...
各参数说明:
- schema_name:指该视图所属架构的名称;
- view_name:指要删除的视图名称;
注意:schema_name可以省略。
例:删除系统中的view_emp视图
DROP VIEW view_emp
删除完毕后,再查询一下视图信息
10.3 以界面方式操作视图
视图为数据呈现提供了多样的表现形式,用户可以通过视图浏览表中感兴趣的数据,在SSMS中,可以以界面方式操作视图,包括创建、修改和删除。
10.3.1 在SSMS中创建视图
在SSMS中创建视图最大的好处就是无须记住SQL语句。
例:创建视图view_emp_01,查询员工信息表中员工的编号、姓名、职务:
步骤1:启动SSMS,打开数据库mydatabase,在展开该数据库的“视图”结点,然后右键选择快捷菜单“新建视图”命令。
步骤2:弹出“添加表”对话框。在“表”选项卡中列出了用来创建视图的基本表,选择表“employee”,单击【添加】按钮,然后单击【关闭】。
💡提示:
视图的创建也可以基于多张表,如果要选择多张表,可以按住CTRL键,然后分别选择列表中的数据表。
步骤3:此时,即可打开“视图编辑器”窗口,窗口中包含三块区域,一是“关系图”窗格,可以添加或删除表;一是“条件”窗格,可以对视图的显示格式进行修改;一是“SQL”窗格,可以输入SQL语句;
步骤4:在“关系图”窗格区中单击表中字段左边的复选框选择需要的字段。
💡提示:
在SQL窗格区域中,可以进行以下具体操作:
(1)通过输入SQL语句创建新查询;
(2)根据在“关系图”窗格和“条件”窗格中进行的设置,对查询和视图设计器创建的SQL语句进行修改。
(3)输入语句可以利用所使用数据库的特有功能。
步骤5:单击工具栏【保存】按钮,打开“选择名称”对话框,输入视图的名称后,单击【确定】保存即可完成视图的创建。
💡提示:
用户也可以单击工具栏上对应的按钮选择打开或者关闭这些窗格,鼠标悬停会自动出现该命令的提示。
10.3.2 在SSMS中修改视图
修改视图的界面与创建视图的界面非常类似。
例:修改视图view_emp_01,只查询员工信息表中姓名、职务与工资:
步骤1:启动SSMS,打开数据库mydatabase,再展开该数据库下的“视图”结点,在“视图”下找到需要修改的视图后,右键,在弹出的快捷菜单中选择“设计”命令;
步骤2:修改视图中的语句,在视图编辑器窗口中,从数据表中取消code的选重状态,同时选中salary全的复选框;
步骤3:单击【保存】按钮,即可完成对视图的修改。
10.3.3 在SSMS中删除视图
在SSMS中删除视图的操作非常简单:
步骤1:启动SSMS,打开数据库mydatabase结点,再展开该数据库下的“视图”结点,选择需要删除的视图,右键,在弹出的快捷菜单中选择“删除”命令;
步骤2:弹出“删除对象”窗口,单击【确定】按钮,即可完成视图的删除。
10.4 通过视图操作数据
通过视图操作数据库是指通过视图来插入、修改、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图操作的时候都是转到基本表进行更新的,如果对视图增加或者删除记录,实际上是对其基本表增加或者删除记录。
10.4.1 通过视图插入数据
使用INSERT语句可以向单个基本表组成的视图中添加数据,而不能向多张表组成的视图中添加数据。
例:通过视图向基本表employee中插入一条新纪录
首先我们创建一个视图
CREATE VIEW view_emp AS
SELECT * FROM employee
然后观察一下插入前表中数据,稍后好做对比
使用创建的视图向表中插入一行数据
INSERT INTO view_emp
VALUES(116,'雷鸣鸣','女',3,'销售员',2500)
如果视图并非基本表的全部字段,也可插入新行:
先创建一张非完整字段的视图
CREATE VIEW view_emp_02(编号,姓名,职务,工资,部门编码) AS
SELECT code,name,job,salary,deptcode
FROM employee
老规矩,先来看看插入前的表,也就是上面例子的结果,这里就不重复贴图了,接着插入新纪录
INSERT INTO view_emp_02
values(117,'万金油','技术员',3000,2)
💡注意:插入新数据时,切记不要忘记字段类型和字段顺序。
10.4.2 通过视图修改数据
除了可以插入一条完整的记录外,通过视图也可以更新基本表中的记录的某些列值。
例:通过视图view_emp将编号时101的员工姓名修改为“张大明”
UPDATE view_emp
SET name='张大明'
WHERE code=101
例:通过视图view_emp_02将部门编码为2的员工工资增加500元
UPDATE view_emp_02
SET 工资=工资+500
WHERE 部门编码=2
这是修改前
这是修改后
10.4.3 通过视图删除数据
当数据不再使用时,可以通过DELETE语句在视图中删除
例:通过视图view_emp_02删除基本表employee中的记录
DELETE FROM view_emp_02
WHERE 姓名='张大明'
看下基本表的数据
可以发现,操作视图,等于操作基本表。
📢注意:
建立在多张表之上的视图,无法使用DELETE语句进行删除操作。