MySQL之视图

虚虚实实,实实虚虚,在数据库中,也存在着一种虚和实的关系。

就是我们的由真实数据而创建的视图

我们通常先创建一个数据表,但是这个数据表有时候可能给并非是给管理员操作,而是给用户去操作,这时候视图就应运而生了。

视图在数据库中是一种虚拟存在的表,但它的数据还是依赖与真实存在的数据表。

视图是建立在表的基础之上,也就是说如果我们要创建一个视图,就必须在数据表的基础之上创建一个查询语句,通过视图创建语句和查询语句结合起来,一个视图就建立出来了

在之前我们学习的查询语句中,可以将两个表关联起来查询。从上述可知,视图是和查询语句结合起来的,那么问题来了,视图也能否将两张表关联起来呢?答案是可以的

视图的创建分为两种:

1、基于单表创建视图

2、基于多表创建视图

下面我们来进行下视图的管理(创建,查看。修改和删除)

数据表准备工作:

CREATE TABLE bms(
empno VARCHAR(20) NOT NULL,
ename VARCHAR(20) NOT NULL,
job VARCHAR(20) NOT NULL,
deptno INT NOT NULL
);

视图的创建语句:

CREATE [OR REPLACE] VIEW 视图名 [(字段列表)] AS select_statement

OR REPLACE:可选参数,若是数据中有这个视图就替换原有的视图,若不存在则创建该视图

视图名:需要创建视图的名称,该名称在数据库中必须是唯一的,不可以和其他的数据表或视图同名

select_statement:即为查询语句

以下是单表创建的例子

将员工工号empno、员工姓名ename、职位job和部门编号deptno查询出来创建视图view_emp的SQL语句::

CREATE VIEW view_emp AS SELECT empno,ename,job,deptno FROM emp;

验证视图是否创建成功:使用SELECT语句查看视图:

SELECT * FROM view_emp;#注意FROM后面跟的是视图名称,不是表名称,因为我们查看视图,而不是查询数据表

更改视图关于真实数据表的字段名:

格式为:CREATE [OR REPLACE] VIEW 视图名 [(字段列表)] AS select_statement

即在刚刚创建视图的查询的语句上,在视图名后面添加一串字段列表

SQL语句:

CREATE VIEW view_emp2 (e_no,e_name,e_job,e_deptno) AS SELECT empno,ename,job,deptno FROM emp;

使用查看视图语句:

SELECT * FROM view_emp2;

可以发现,原本的字段名empno...已经被我们改成e_no...

以上是基于单表的创建视图,下面我们来学习基于多表的创建视图

在之前我们学习多表查询时还接触了连接方式,如内连接和外连接等

基于多表的创建视图,需要我们在数据库中拥有两个表的基础下列例子中我们需要有一个emp表和dept表

创建基于多表创建视图语句:

CREATE VIEW view_emp_dept(e_no,e_name,e_job,e_deptno,e_deptname) AS 
SELECT e.empno,e.ename,e.job,e.deptno,d.dname 
FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

查看该视图:

SELECT * FROM view_emp_dept;

可以看到上述基于多表创建视图语句中,使用了我们之前学习过的左连接,以emp表为左表,将会显示左表中的全部数据,若是右表没有左表中所对应的数据,则显示的值为NULL

在进行上述多表的操作中,我们发现在建立视图前 我们对多表的查询需要输入较长的语句,而建立视图后,我们则只需要查询视图就ok了,有利于节省操作时间,和操作难度,使普通人容易上手

在我们想查看视图里的字段的时候,第一步可能先是考虑使用‘SHOW CREATE VIEW’语句

例如:#结果如下

SHOW CREATE VIEW view_emp_dept;

这样虽然说可以看到字段名,但是这么看着有点太复杂了,MySQL中有一个语句可以直接在结果中显示字段名:DESCRIBE 视图名或简写为DESC 视图名。

输入以下DESCRIBE语句:

DESCRIBE view_emp_dept;

当我们想知道视图的状态的时候

可以使用语句:

SHOW TABLE STATUS LIKE’view_emp_dept’;

如上图,可以看到名字,创建时间等状态信息

竟然数据表的数据是可以被修改的,那么说明由数据表生成的视图也是可以被修改的

但视图的修改是和数据表的修改不一样的

数据表的修改:数据表的修改是对实际存储的物理表进行修改

视图的修改:视图时一个虚拟表,它的内容由一个查询定义,修改视图一般代表着更改着个查询的定义,而不是直接修改物理表存储的数据

例如,有一个名为emp的数据表名,该数据表中有一个名为view_emp的视图,其中有一个字段名为employee_name,如果现在将其字段名改成name。这时我们再次去查看视图时,就会出现错误。

使用CREATE OR REPLACE VIEW语句修改视图

语句格式:CREATE OR REPLACE VIEW 视图名 AS SELECT语句

在进行视图修改的时候,要求修改的视图在数据库中已经存在的,如果视图不存在,那么将创建一个新的视图。

如下,将在视图view_emp_dept原有的基础上新增员工上级工号的字段,

CREATE OR REPLACE VIEW view_emp_dept(e_no,e_name,e_job,e_mgr,e_deptno,e_deptname) 
AS 
SELECT e.empno,e.ename,e.job,e.mgr,e.deptno,d.dname 
FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

 

通过以上观察,我们发现CREATE OR REPLACE VIEW语句似乎相当与将原有的视图以一个与原视图相差不大但添加了我们所要添加的字段的视图,做一个覆盖或者添加(该视图不存在的情况下)的操作

以下我们来介绍另一种修改视图的方法

使用ALTER语句修改视图

ALTER语句格式如下:

ALTER VIEW <视图名> AS <SELECT语句>

使用ALTER语句修改视图:将

ALTER VIEW view_emp_dept (e_no,e_name,e_job,e_mgr,e_deptname)
AS
SELECT e.empno,e.ename,e.job,e.mgr,d.dname
FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno;

与CREATE OR REPLACE VIEW语句相同,相当与覆盖或添加的操作

删除视图:用于视图不在使用的时候

使用DROP VIEW语句

DROP VIEW 视图名;

通过视图,我们可以查看依赖与真实数据表中的数据,在我们对真实数据进行数据的增,删,查,改时,视图优点就体现出来了

总而言之,视图就是让临时操作数据库的人员,通过视图可以更加方便的操作

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值