视图的引入
视图可以看作定义在SQL Server上的虚拟表.视图正如其名字的含义一样,是另一种查看数据的入口.常规视图本身并不存储实际的数据,而仅仅存储一个Select语句和所涉及表的metadata.
通过视图,客户端不再需要知道底层table的表结构及其之间的关系。视图提供了一个统一访问数据的接口。
- 特点
- 视图是一种虚拟的表,是从数据库中一个或者多个表中导出来的表;
- 数据库中只存放了视图的定义,并没有存放视图中的数据,这些数据存放在原来的表中;
- 使用试图查询时,数据库系统会从原来的表中读取对应的数据。
- 作用
- 简便化:视图隐藏了底层的表结构,简化了数据访问操作
- 安全性:因为隐藏了底层的表结构,所以大大加强了安全性,用户只能看到视图提供的数据
- 使用视图,方便了权限管理,让用户对视图有权限而不是对底层表有权限进一步加强了安全性
- 逻辑独立性:视图提供了一个用户访问的接口,当底层表改变后,改变视图的语句来进行适应,使已经建立在这个视图上客户端程序不受影响
创建视图
CREATE [ALGORITHM={UNDEFIEND|MERGE|TEMPTABLE}]
VIEW 视图名 [{属性清单}]
AS SELECT 语句
[WITH [CASCADED|LOCAL]CHECK OPTION];
ALGORITHM是可选参数,表示视图选择的算法;
“视图名”参数表示要创建的视图的名称;
“属性清单”是可选参数,其指定了视图中各种属性的名词,默认情况下与select语句中查询的属性相同;
SELECT语句参数是一个完整的查询语句,表示从某个表查出某些满足条件的记录,将这些记录导入视图中;
WITH CHECK OPTION是可选参数,表示更新视图时要保证在该视图的权限范围之内;
algorithm包括undefined、merge和temptable。其中,
undefined选项表示MySql将自动选择所要使用的算法;
merge选项表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分;
temptable选项表示将视图的结果存入临时表,然后使用临时表执行语句;
cascaded是可选参数,表示更新视图时要满足所有相关视图和表的条件,该参数为默认值;
local表示更新视图时,要满足该视图本身的定义条件即可。
在单表上创建视图
CREATE VIEW v1 AS SELECT * FROM t_book;
SELECT * FROM v1;
CREATE VIEW v2 AS SELECT bookName, id FROM t_book;
SELECT * FROM v2;
//更换视图属性名称
CREATE VIEW v3(FIRST, SECOND) AS SELECT bookName, id FROM t_book;
SELECT * FROM v3;
在多表中创建视图
CREATE VIEW v4 AS SELECT bookName, typeName FROM t_book, t_booktype WHERE t_book.bookTypeId=t_bookType.id;
SELECT * FROM v4;
查看视图
- describe 视图名 查看视图基本信息,也可以用desc 视图名;
desc v1;
- show table status 语句查看视图基本信息;
show table status like 'v1';//但是基本没有内容,因为它是一个虚表
- show create view 视图名 语句查看视图详细信息;
show create view v1;
- 在views表中查看视图详细信息。
修改视图
create or replace view语句修改视图
create or replace [algorithm={undefined|merge|temptable}]
view 视图名[(属性清单)]
as select 语句
[with [cascaded|local|check option]];
//CREATE OR REPLACE VIEW v1 AS SELECT bookName FROM t_book;
ALTER语句修改视图
alter [algorithm={undefined|merge|temptable}]
view 视图名[(属性清单)]
as select 语句
[with [cascaded|local|check option]];
//ALTER VIEW v1 AS SELECT * FROM t_book;
更新视图
更新视图是指通过视图来更删改查表中的数据。因为视图是一个虚表,其中没有数据。通过视图更新时,都是转换基本表来更新。更新视图时,只能更新权限范围内的数据。超出了范围,就不能更新。
INSERT INTO v1 VALUES(NULL, "hello world", 2);
UPDATE v1 SET bookName="update view v1" WHERE id=9;
DELETE FROM v1 WHERE id=9;
删除视图
删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据;
DROP VIEW [IF EXISTS] 视图列表 [RESTRICT|CASCADE];
//DROP VIEW v1;
今天对于视图的介绍就到这里,涉及的都是基础的内容,下一篇我们主要介绍函数及存储过程的使用。