十七、视图(view)
17.1 什么是视图
view:站在不同的角度去看待同一份数据
注意!!!视图对应的语句只能是DQL语句。但是视图对象创建完成之后,可以对视图进行增删改查等操作。
17.2 视图对象的创建、删除
# 表复制:
mysql> create table dept2 as select * from dept;
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from dept2;
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
4 rows in set (0.00 sec)
# 创建视图对象
mysql> create view dept2_view as select * from dept2;
Query OK, 0 rows affected (0.00 sec)
# 删除视图对象
mysql> drop view dept2_view;
Query OK, 0 rows affected (0.00 sec)
注意:只有DQL语句才能以view的形式创建。
create view view_name as 这里的语句必须是DQL语句;
17.3 用视图能做什么
可以面向视图对象进行增删改查,对视图对象的增删改查,会导致原表被操作。
(视图的特点:通过对视图的操作,会影响原表数据)
# 创建视图对象
mysql> create view dept2_view as select * from dept2;
Query OK, 0 rows affected (0.00 sec)
# 面向视图查询
mysql> select * from dept2_view;
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
+--------+------------+----------+
4 rows in set (0.02 sec)
# 面向视图插入
mysql> insert into dept2_view(deptno, dname, loc) values(60, 'SALES', 'BEIJING');
Query OK, 1 row affected (0.00 sec)
# 查询原表数据
mysql> select * from dept2;
+--------+------------+----------+
| DEPTNO | DNAME | LOC |
+--------+------------+----------+
| 10 | ACCOUNTING | NEW YORK |
| 20 | RESEARCH | DALLAS |
| 30 | SALES | CHICAGO |
| 40 | OPERATIONS | BOSTON |
| 60 | SALES | BEIJING |
+--------+------------+----------+
5 rows in set (0.00 sec)
# 面向视图删除
mysql> delete from dept2_view;
Query OK, 5 rows affected (0.00 sec)
# 查询原表数据
mysql> select * from dept2;
Empty set (0.00 sec)
17.4 视图对象在实际开发中到底有什么用?
方便,简化开发,利于维护
mysql> create view emp_dept_view
-> as select e.ename, e.sal, d.dname
-> from emp e
-> join dept d
-> on e.deptno = d.deptno;
Query OK, 0 rows affected (0.00 sec)
实际应用:
假设有一条非常复杂的SQL语句,而这条SQL语句需要在不同的位置上反复使用。每一次使用这个sql语句的时候都需要重新编写,很长,很麻烦,怎么办?
- 可以把这条复杂的SQL语句以视图对象的形式新建,在需要编写这条SQL语句的位置直接使用视图对象,可以大大简化开发。
并且利于后期的维护,因为修改的时候也只需要修改一个位置就行,只需要修改视图对象所映射的SQL语句。
以后面向视图开发的时候,使用视图可以像使用table一样。可以对视图进行增删改查等操作。
视图不在内存当中,视图对象也是存储在硬盘上的,不会消失。