当前位置:文档之家› 第7章索引与视图

第7章索引与视图

第七章 索引与视图
7.1 索引概述
7.1.1 索引的基本概念 7.1.2 索引分类 7.4 视图的操作
7.4.1 创建视图
7.4.2 修改视图 7.4.3 删除视图 7.4.4 查看和修改视图属性 7.5 视图的应用 7.5.1 通过视图检索表数据 7.5.2 通过视图添加表数据 7.5.3 通过视图修改表数据
通过视图查询数据
例7-8 查询例7-6所创建的视图sell_view中的姓名 为钱达理的员工所销售的商品名称。 SELECT goods_name FROM sell_view WHERE employee_name='钱达理' ORDER BY order_date
通过视图插入数据
语法格式:
INSERT INTO 视图名 VALUES(列值1,列值2,列值 3,…,列值n)

通过视图删除数据
尽管视图不一定包含基础表的所有列,但可以通过视 图删除基础表的数据行。 语法格式:
DELETE FROM 视图名 WHERE 逻辑表达式 例7-10: delete from goods_view Where goods_name=„IBM R51‟
若通过视图要删除的数据行不包含在视图定义中,该
7.2 索引的操作
7.2.1 创建索引 7.2.2 查看索引
7.2.3 编辑索引
7.2.4 删除索引 7.3 视图概述 7.3.1 视图的概念 7.3.2 视图的作用
7.5.4 通过视图删除表数据
7.3.3 视图的限制
视图的概念
视图是一种数据库对象,是从一个或者
多个数据表或视图中导出的虚表,视图的 结构和数据是对数据表进行查询的结果。
使用DROP VIEW语句可以一次删除多个视图。
删除视图
例7-7 删除view1视图。
USE Sales IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'view1') DROP VIEW view1 GO

基表(base table):独立存在的表 视图——虚拟表。在SQL中只存储视 图的定义,不存放视图所对应的记录
SC表
Sno 2005001 2005001 2005001 2005002 2005005 2005002 Cno 1 2 3 2 2 3 Grade 92 85 88 90 68 80
插入数据注意问题

插入视图中的列值个数、数据类型应该和视图定 义中的列数、基表对应列的数据类型保持一致

如果视图的定义值选取了基表的部分列,则基础 表的其余列都允许为空,或有列不允许为空,但 设置了默认值,可以成功的插入数据 例7-9
如果在视图定义中使用了WITH CHECK OPTION子句,则在视图上执行的数据插入语句 必须符合定义视图的SELECT语句中所设定的条 件。例7-9-2
更新视图需注意的问题
若视图定义包含了计算列,该视图是不可更新的.例7-11-2,
例7-11-3
若视图定义包含了多个基表,且要更改的列属于同一个
基表,则可以通过视图更新源表数据。例7-11-4
若视图定义包含了多个基表,且要更改的列分属于多个
基表,则不能通过视图更新源表数据。例7-11-5
• 什么是视图?
视图存储
DBMS执行CREATE VIEW语句时只是把视图的定 义存入数据字典,并不执行其中的SELECT语句。 在对视图查询时,按视图的定义从基本表中将数据 查出。
创建视图示例
例7-6 在Sales数据库中创建sell_view视图,该视图选择3个基表 (employee,goods,sell_order)中的数据来显示员工销售货物情况的虚 拟表。 CREATE VIEW sell_view AS SELECT employee.employee_name, employee.employee_id, sell_order.order_num, sell_order.discount, goods.goods_name, goods.unit_price , sell_order.order_date FROM employee INNER JOIN sell_order ON employee.employee_id = sell_order.employee_id INNER JOIN goods ON sell_order.goods_id = goods.goods_id
· view_name:被修改的视图的名字。 · column_name
:在视图中包含的列名。
· WITH
CHECK OPTION:迫使通过视图进行数据修 改的所有语句必须符合视图定义中设置的条件。
修改视图(续)
· table_name:视图基表的名字。
ENCRYPTION:对包含创建视图的SQL脚本进 行加密。 【例7-6-4】修改视图view_nan的定义,使其从employee表中 查询出性别为D001部门男员工的姓名,出生日期,电话等资料。 USE sales GO ALTER VIEW view_nan AS SELECT * FROM employee WHERE sex = „男’ and dapartment_id=„D001‟
创建视图
SQL
Server管理平台 T-SQL
CREATE VIEW [ < owner > .] view_name [ ( column_name [ ,...n ] ) ]
[WITH ENCRYPTION]
AS
select_statement [WITH CHECK OPTION]
WITH
CHECK OPTION:迫使通过视图执行的所有 数据修改语句必须符合视图定义中设置的条件。
WITH
ENCRYPTION:对视图的定义进行加密
注意
组成视图的属性列名
全部省略或全部指定
省略:
由子查询中SELECT目标列中的诸字段组成
明确指定视图的所有列名时:
(1) 某个目标列是集函数或列表达式 (2) 目标列为 * (3) 多表连接时选出了几个同名列作为视图的字段 (4) 需要在视图中为某个列启用新的更合适的名字

视图限制
(1)在一个批事务中,CREATE VIEW语句不能与其 他SQL语句结合使用。
(2)不能在视图上建立触发器和索引。 (3)一个视图最多只能有250列。 (4)不能基于临时表建立视图,由SELECT INTO语 句可建立临时表,在CREATE VIEW语句中不能使 用INTO关键字。 (5)在CREATE VIEW语句中不能使用联合操作符 UNION。
视图的定义:SQL-Select语句 视 图 的 使 用 : 等 同 于 基 表 , 可 以 使 用
Select、Insert、Update等操作
视图的概念
视图可以是一个数据表的一部分,也可
以是多个基表的联合;视图也可以由一个或 多个其他视图产生。 基表中的数据发生变化,从视图中查询 出的数据也随之改变;视图中的数据发生 变化,基表中的数据也可能发生变化
• 什么是视图?

基表(base table):独立存在的表 视图——虚拟表。在SQL中只存储视 图的定义,不存放视图所对应的记录
视图引例
例7-6-1
男职员的工号、姓名、出生日期、地址、电话保 存为视图View_nan CREATE VIEW view_nan(employee_id,employee_name,birth_date,address, telephone) AS SELECT employee_id,employee_name,birth_date,address,telephone FROM employee WHERE sex=„男’ 例7-6-1-1查询男职员的工号、姓名、出生日期、地址、电 话 SELECT * FROM view_nan
· WITH
删除视图
删除一个视图,就是删除视图的定义及其赋予的全部权
限,而原先通过视图获得的数据并没有被删除。删除视图参 考表的时候,视图不会被删除,视图必须被单独删除。
方法: 使用SQL Server管理平台删除
用DROP VIEW语句删除。
1.
用DROP VIEW语句删除视图
DROP VIEW view_namel,view_name2,…
视图限制
(6)在插入或修改数据时,每个INSERT语句和 UPDATE语句不能影响一个以上的视图基表。 (7)对视图中的计算列不允许使用INSERT语句插入 数据。
(8)UPDATE语句不能够修改视图的计算列数据,也 不允许它修改包含集合的函数和内置函数的视图列。
(9)在视图的Text和Image数据类型的列上不允许使 用READTEXT和WRITETEXT语句。
视图作用
优点: 简化用户查询(如连接) 为用户定制数据(不同的用户以不同的方式看到 不同或者相同的数据集) 简化用户权限的管理(授予在视图上的操作权限, 而没有授予用户在表上的操作权限) 导出数据(定义多表视图,利用批复制功能实现 数据导出) 缺点 降低性能(视图消解) 修改限制(有些复杂视图是不能修改的)
With check option
建立男职员信息的视图,并要求透过该 视图进行的更新操作只涉及男职员。
7-6-2
CREATE VIEW
view_nan(employee_id,employee_name, birth_date,address,telephone)
AS
SELECT employee_id,employee_name, birth_date,address,telephone FROM employee WHERE sex=„男’ WITH CHECK OPTION
相关主题