文章目录
Ⅰ. 视图的概念
在 MySQL
中,"视图"是一种 虚拟表,它是基于一个或多个数据库表的查询结果。视图 并不实际存储数据,而是存储了一个查询的定义(即 select
语句),每当查询视图时,实际的数据都是从基础表中获取的。
创建视图的主要目的是简化复杂的查询操作和隐藏基础表的结构,从而提供更简洁、易于理解的数据接口。通过使用视图,可以将复杂的查询逻辑抽象为一个命名的实体,使得查询和数据操作更加方便和有效。
同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。
Ⅱ. 视图的操作
1、创建视图
sql
create view 视图名 as
select语句;
2、删除视图
sql
drop view 视图名;
3、查看视图
sql
select 列名 from 视图名 [order by ...];
案例
sql
-- 根据之前的雇员表创建视图
mysql> create view my_view as select ename, dname from emp inner join dept on emp.deptno<=>dept.deptno;
Query OK, 0 rows affected (0.00 sec)
-- 可以看到多了一张my_view表结构
mysql> show tables;
+-----------------+
| Tables_in_scott |
+-----------------+
| dept |
| emp |
| my_view |
| salgrade |
+-----------------+
4 rows in set (0.00 sec)
-- 查看my_view表结构
mysql> select * from my_view;
+--------+------------+
| ename | dname |
+--------+------------+
| SMITH | RESEARCH |
| ALLEN | SALES |
| WARD | SALES |
| JONES | RESEARCH |
| MARTIN | SALES |
| BLAKE | SALES |
| CLARK | ACCOUNTING |
| SCOTT | RESEARCH |
| KING | ACCOUNTING |
| TURNER | SALES |
| ADAMS | RESEARCH |
| JAMES | SALES |
| FORD | RESEARCH |
| MILLER | ACCOUNTING |
+--------+------------+
14 rows in set (0.00 sec)
💥注意事项
- 与表一样,视图必须唯一命名(不能出现同名视图或表名)
- 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
- 视图不能添加索引,也不能有关联的触发器或者默认值
- 视图可以提高安全性,必须具有足够的访问权限
order by
可以用在视图中,但是如果从该视图检索数据select
中也含有order by
,那么 该视图中的order by
将被覆盖- 视图可以和表一起使用
- 视图的数据变化会影响到基表,基表的数据变化也会影响到视图。