1、什么是视图?
视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中。
通过视图,可以展现基表(用来创建视图的表)的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。
2、为什么要使用视图?
- 简单:使用视图的用户完全不需要关心后面对应的表的结构、关联条件和筛选条件,对用户来说已经是过滤好的复合条件的结果集。
- 安全:使用视图的用户只能访问他们被允许查询的结果集,对表的权限管理并不能限制到某个行某个列,但是通过视图就可以简单的实现。
总而言之,使用视图的大部分情况是为了保障数据安全性,提高查询效率。
3、创建视图
(1)基本语法
-- 创建视图
CREATE VIEW <视图名> AS <SELECT语句>
或者
CREATE VIEW <视图名> (v_id, v_title, .. )
AS <SELECT id, title, .. FROM table -- 可以为视图新定义字段别名
-- 视图名称 通常以view_ 或者 v_为前缀,后面加表名
-- select语句可以是单个表,也是多表的联合查询
例一:创建单表视图
CREATE VIEW view_goods AS
SELECT goods_id, cat_id, goods_sn, goods_name
FROM ecs_goods
ORDER BY goods_id ASC
例二:创建多表视图
CREATE VIEW view_goods_category AS
SELECT a.goods_id, a.cat_id, b.cat_name, a.goods_sn, a.goods_name
FROM ecs_goods AS a
LEFT JOIN ecs_category AS b ON a.cat_id = b.`cat_id`ORDER BY a.goods_id ASC;
(2)查询视图
视图一旦创建,就可以如同查询普通数据表一样,使用 SELECT 语句查询视图中的数据,语法和查询基础表的数据一样。
单表视图可以进行增insert、删delete、改update、查,同时对基本表也会进行修改。
多表视图,只能进行查询,不能修改。
-- 查询指定视图的字段
DESCRIBE 视图名;
或者
DESC 视图名;
-- 单表视图可以进行增insert、删delete、改update、查
SELECT * FROM view_goods ORDER BY goods_id DESC;
-- 修改视图(主表也修改)
UPDATE view_goods SET goods_name = '防暑套装 58A型--999' WHERE goods_id = 1;
-- 新增视图
INSERT INTO view_goods SET cat_id = 2, goods_name = '在视图中添加的商品';
-- 删除视图数据
DELETE FROM view_goods WHERE goods_id = 138;--
-- 多表视图 无法进行修改修改
mysql> update view_goods_category set goods_name = '1234545' where goods_id = 1;
ERROR 1288 (HY000): The target table view_goods_category of the UPDATE is not updatable
4、哪些情况下单表视图也无法增删改其数据内容?
如果视图包含以下结构中的任何一种,它就是不可更新的:
- 聚合函数 SUM()、MIN()、MAX()、COUNT() 等。
- DISTINCT 关键字。
- HAVING 子句。
- UNION 或 UNION ALL 运算符。
- 位于选择列表中的子查询。
- FROM 子句中的不可更新视图或包含多个表。
- WHERE 子句中的子查询,引用 FROM 子句中的表。
- ALGORITHM 选项为 TEMPTABLE(使用临时表总会使视图成为不可更新的)的时候。
5、查看当前数据库有多少个视图?
SHOW TABLES; -- 显示所有的表和视图
SHOW TABLE STATUS; -- 显示所有的表和视图想想信息
SHOW TABLE STATUS WHERE COMMENT = 'view'; -- 只显示视图的信息
6、显示视图的创建SQL语句
SHOW CREATE VIEW 视图名称
7、修改视图
ALTER VIEW <视图名> AS <SELECT语句>
-- 修改视图的定义,除了可以通过 ALTER VIEW 外,也可以使用 DROP VIEW 语句先删除视图,再使用 CREATE VIEW 语句来实现。
8、删除视图
删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除真实的数据表。
DROP VIEW <视图名1> [ , <视图名2> …]
9、视图有哪些优缺点?
- 查询简单化,视图能简化用户的操作
- 数据安全性,视图使用户能以多种角度看待同一数据,能够对机密数据提供安全保护。
- 逻辑数据独立性,视图对重构数据库提供了一定程度的逻辑独立性。
10、视图有哪些特点?
- 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
- 视图是由基本表(实表)产生的表(虚表)。
- 视图的建立和删除不影响基本表。
- 对单表视图内容的更新(添加,删除和修改)直接影响基本表。
- 当视图来自多个基本表时,不允许添加和删除数据。