【MySQL】二十九、视图(view)

1. 什么是视图

站在不同的角度去看到数据。(同一张表的数据,通过不同的角度去看待)。

• 视图是一种根据查询(也就是SELECT表达式)定义的数据库对象,用于获取想要看到和使用的局部数据。
• 视图有时也被成为“虚拟表”。
• 视图可以被用来从常规表(称为“基表”)或其他视图中查询数据。

相对于从基表中直接获取数据,视图有以下好处

  • 访问数据变得简单
  • 可被用来对不同用户显示不同的表的内容
  • 用来协助适配表的结构以适应前端现有的应用程序

视图作用:

  • 提高检索效率
  • 隐藏表的实现细节【面向视图检索】

2. 创建,删除视图

创建视图的语法:

create view 视图名 as select 字段名1, 字段名2 from 表名;

如:

create view myview as select empno, ename from emp;

删除视图语法:

drop view 视图名;

如:

drop view myview;

注意:

  • 只有DQL语句(select语句)才能以视图对象的方式创建出来。

  • 对视图进行增删改查,会影响到原表数据。(通过视图影响原表数据的,不是直接操作的原表)

  • 可以对视图进行CURD;

3. 面向视图操作

3.1 查看视图

select * from myview;
+-------+--------+
| empno | ename  |
+-------+--------+
|  7369 | SMITH  |
|  7499 | ALLEN  |
|  7521 | WARD   |
|  7566 | JONES  |
|  7654 | MARTIN |
|  7698 | BLAKE  |
|  7782 | CLARK  |
|  7788 | SCOTT  |
|  7839 | KING   |
|  7844 | TURNER |
|  7876 | ADAMS  |
|  7900 | JAMES  |
|  7902 | FORD   |
|  7934 | MILLER |
+-------+--------+

3.2 通过视图修改原表数据

为了不影响原来的emp表,我复制一张新表emp1

create table emp1 as select * from emp;

根据emp1创建视图:

create view myview1 select empno, ename, sal from emp1;

修改视图中的数据:

update myviewq  set ename = 'hehe', sal =1 where empno = 7369;

查看myview1视图:

select * from myview1;
+-------+--------+---------+
| empno | ename  | sal     |
+-------+--------+---------+
|  7369 | hehe   |    1.00 |
|  7499 | ALLEN  | 1600.00 |
|  7521 | WARD   | 1250.00 |
|  7566 | JONES  | 2975.00 |
|  7654 | MARTIN | 1250.00 |
|  7698 | BLAKE  | 2850.00 |
|  7782 | CLARK  | 2450.00 |
|  7788 | SCOTT  | 3000.00 |
|  7839 | KING   | 5000.00 |
|  7844 | TURNER | 1500.00 |
|  7876 | ADAMS  | 1100.00 |
|  7900 | JAMES  |  950.00 |
|  7902 | FORD   | 3000.00 |
|  7934 | MILLER | 1300.00 |
+-------+--------+---------+

查表emp_bak:

select * from emp_bak;
+-------+--------+-----------+------+------------+---------+---------+--------+
| EMPNO | ENAME  | JOB       | MGR  | HIREDATE   | SAL     | COMM    | DEPTNO |
+-------+--------+-----------+------+------------+---------+---------+--------+
|  7369 | hehe   | CLERK     | 7902 | 1980-12-17 |    1.00 |    NULL |     20 |
|  7499 | ALLEN  | SALESMAN  | 7698 | 1981-02-20 | 1600.00 |  300.00 |     30 |
|  7521 | WARD   | SALESMAN  | 7698 | 1981-02-22 | 1250.00 |  500.00 |     30 |
|  7566 | JONES  | MANAGER   | 7839 | 1981-04-02 | 2975.00 |    NULL |     20 |
|  7654 | MARTIN | SALESMAN  | 7698 | 1981-09-28 | 1250.00 | 1400.00 |     30 |
|  7698 | BLAKE  | MANAGER   | 7839 | 1981-05-01 | 2850.00 |    NULL |     30 |
|  7782 | CLARK  | MANAGER   | 7839 | 1981-06-09 | 2450.00 |    NULL |     10 |
|  7788 | SCOTT  | ANALYST   | 7566 | 1987-04-19 | 3000.00 |    NULL |     20 |
|  7839 | KING   | PRESIDENT | NULL | 1981-11-17 | 5000.00 |    NULL |     10 |
|  7844 | TURNER | SALESMAN  | 7698 | 1981-09-08 | 1500.00 |    0.00 |     30 |
|  7876 | ADAMS  | CLERK     | 7788 | 1987-05-23 | 1100.00 |    NULL |     20 |
|  7900 | JAMES  | CLERK     | 7698 | 1981-12-03 |  950.00 |    NULL |     30 |
|  7902 | FORD   | ANALYST   | 7566 | 1981-12-03 | 3000.00 |    NULL |     20 |
|  7934 | MILLER | CLERK     | 7782 | 1982-01-23 | 1300.00 |    NULL |     10 |
+-------+--------+-----------+------+------------+---------+---------+--------+
14 rows in set (0.00 sec)

视图myview1和表emp_bak中empno为7369的数据均已经发生了改变;

3.3 通过视图删除原表数据

delete from mysview1 where empno = 7369;

4. 视图的作用

对视图的操作其实就是对原表的操作,那为什么不直接在原表操作呢?

因为,视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图,Java程序员只对视图对象进行CRUD。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值