【Linux】Mysql之视图的基本操作

一、什么是视图

        MySQL 视图(View)是一种虚拟存在的表,同真实表一样,视图也由列和行构成, 但视图并不实际存在于数据库中。行和列的数据来自于定义视图的查询中所使用的 表,并且还是在使用视图时动态生成的。

        使用视图查询数据时,数据库会从真实表中取出对应的数 据。因此,视图中的数据是依赖于真实表中的数据的。一旦真实表中的数据发生改 变,显示在视图中的数据也会发生改变。

        视图可以从原有的表上选取对用户有用的信息,那些对用户没用,或者用户没有权限 了解的信息,都可以直接屏蔽掉,作用类似于筛选。这样做既使应用简单化,也保证 了系统的安全。

二、视图与表的区别

视图并不同于数据表,它们的区别在于以下几点:

  • 视图不是数据库中真实的表,而是一张虚拟表,其结构和数据是建立在对数据中真实表的查询基础上的。
  • 存储在数据库中的查询操作 SQL 语句定义了视图的内容,列数据和行数据来自于视图查询所引用的实际表,引用视图时动态生成这些数据。
  • 视图没有实际的物理记录,不是以数据集的形式存储在数据库中的,它所对应的数据实际上是存储在视图所引用的真实表中的。
  • 视图是数据的窗口,而表是内容。表是实际数据的存放单位,而视图只是以不同的显示方式展示数据,其数据来源还是实际表。
  • 视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些 SQL 语句的集合。从安全的角度来看,视图的数据安全性更高,使用视图的用户不接触数据表,不知道表结构。
  • 视图的建立和删除只影响视图本身,不影响对应的基本表。

三、视图的优点

视图与表在本质上虽然不相同,但视图经过定义以后,结构形式和表一样,可以进行
查询、修改、更新和删除等操作。同时,视图具有如下优点:
 

1) 定制用户数据,聚焦特定的数据
在实际的应用过程中,不同的用户可能对不同的数据有不同的要求。
例如,当数据库同时存在时,如学生基本信息表、课程表和教师信息表等多种表同时
存在时,可以根据需求让不同的用户使用各自的数据。学生查看修改自己基本信息的
视图,安排课程人员查看修改课程表和教师信息的视图,教师查看学生信息和课程信
息表的视图。
 

2) 简化数据操作
在使用查询时,很多时候要使用聚合函数,同时还要显示其他字段的信息,可能还需
要关联到其他表,语句可能会很长,如果这个动作频繁发生的话,可以创建视图来简
化操作。
 

3) 提高数据的安全性
视图是虚拟的,物理上是不存在的。可以只授予用户视图的权限,而不具体指定使用
表的权限,来保护基础数据的安全。
 

4) 共享所需数据
通过使用视图,每个用户不必都定义和存储自己所需的数据,可以共享数据库中的数
据,同样的数据只需要存储一次。
 

5) 更改数据格式
通过使用视图,可以重新格式化检索出的数据,并组织输出到其他应用程序中。
 

6) 重用 SQL 语句
视图提供的是对查询操作的封装,本身不包含数据,所呈现的数据是根据视图定义从
基础表中检索出来的,如果基础表的数据新增或删除,视图呈现的也是更新后的数据。视图定义后,编写完所需的查询,可以方便地重用该视图。
要注意区别视图和数据表的本质,即视图是基于真实表的一张虚拟的表,其数据来源
均建立在真实表的基础上。

四、创建基于单表的视图

语法:

creat view 视图名 as select语句

  • 视图名:指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或 视图同名。
  • select语句:通过select语句查询数据组成新的视图

对于创建视图中的 SELECT 语句的指定存在以下限制:

  • 用户除了拥有 CREATE VIEW 权限外,还具有操作中涉及的基础表和其他视图的相关权限。
  • SELECT 语句不能引用系统或用户变量。
  • SELECT 语句不能包含 FROM 子句中的子查询。
  • SELECT 语句不能引用预处理语句参数。

① 查看数据库;

② 切到Class_LInux数据库;

 ③ 查看库中的所有表

 ④ 查看表中的内容

 ⑤ 创建视图

(将students表中的id,name字段作为students_name视图中的数据)

 create view students_name as select id,name from students;

⑥ 查看视图是否创建成功;

(有了students_name 说明视图创建成功)

⑦ 查看视图信息

五、创建基于多表的视图

以student表,student_course表,course2表创建多表视图;

create view student_info(s_id,s_name,s_no,sc_courseid,c_name) as
select s.id,s.name,s.no,sc.courseid,c.name from student s,student_course sc,course2 c where s.id=sc.studentid and sc.courseid=c.id;


 【 解释】

create view student_info(s_id,s_name,s_no,sc_courseid,c_name)

# 创建的视图student_info拥有的字段为s_id,s_name,s_no,sc_courseid,c_name

select s.id,s.name,s.no,sc.courseid,c.name from student s,student_course sc,course2 c where s.id=sc.studentid and sc.courseid=c.id;

# select语句,【s.id,s.name,s.no,sc.courseid,c.name】就是从这三张表中所拿出的数据去创建student_info视图,【student s,student_course sc,course2 c】就是视图数据来源的三张表,我这里给student 重命名为s,student_course 重命名为sc,course2 重命名为 c,方便后续操作,【s.id=sc.studentid and sc.courseid=c.id】就是将这三张表连接起来;


【所以创建基于多表的视图说白了就是视图名后边加上视图所具有字段,select语句就是进行了多表连接,将一些字段放进视图,注意”视图所具有字段“ 和 “一些字段”是一样的字段,但是”视图所具有字段“最好重命名】


六、视图结构的查看

        视图一经定义之后,就可以如同查询数据表一样,使用 SELECT 语句查询视图中的数据,语法和查询基础表的数据一样。


视图用于查询主要应用在以下几个方面:

  • 使用视图重新格式化检索出的数据。
  • 使用视图简化复杂的表连接。
  • 使用视图过滤数据。

DESCRIBE 可以用来查看视图的结构,语法如下:
DESCRIBE 视图名;

【注意】:DESCRIBE 一般情况下可以简写成 DESC,输入这个命令的执行结果和输 入 DESCRIBE 是一样的: desc 视图名

七、查看视图的详细信息

在 MySQL 中,SHOW CREATE VIEW 语句可以查看视图的详细定义。

其语法如下所示:

SHOW CREATE VIEW 视图名 \G

上述 SQL 语句以 \G 结尾,这样能使显示结果格式化。如果不使用 \G ,显示的结果 会比较混乱,如下所示: 

八、查看视图的数据信息

语法和查询表的语法一致;

九、视图的修改

可以使用 ALTER VIEW 语句来对已有的视图进行修改。

语法格式如下:

ALTER VIEW 视图名 AS SELECT语句

① 查看视图students_name

② 查看表studnets;

③ 将视图students_name的两个字段修改成四个个字段;

 ④ 查看视图是否修改成功

10、修改视图内容

视图是一个虚拟表,实际的数据来自于基本表,所以通过插入、修改和删除操作更新 视图中的数据,实质上是在更新视图所引用的基本表的数据。


【注意:对视图的修改就是对基本表的修改,因此在修改时,要满足基本表的数据定义。】

某些视图是可更新的。也就是说,可以使用 UPDATE、DELETE 或 INSERT 等语句更新基本表的内容。对于可更新的视图,视图中的行和基本表的行之间必须具有一对一的关系。

还有一些特定的其他结构,这些结构会使得视图不可更新。更具体地讲,如果视图包含以下结构中的任何一种,它就是不可更新的:

  • 聚合函数 SUM()、MIN()、MAX()、COUNT() 等。
  • DISTINCT 关键字。
  • GROUP BY 子句。
  • HAVING 子句。
  • UNION 或 UNION ALL 运算符。
  • 位于选择列表中的子查询。
  • FROM 子句中的不可更新视图或包含多个表。
  • WHERE 子句中的子查询,引用 FROM 子句中的表。
  • ALGORITHM 选项为 TEMPTABLE(使用临时表总会使视图成为不可更新的)的时候。

使用 UPDATE 语句更新视图;语法如下:

 update 视图名 set 修改后的值 where 条件;

① 查看原视图;

② 修改id为11的name为哈哈哈; 

③ 查看视图,是否修改成功

十一、修改视图名称

修改视图的名称可以先将视图删除,然后按照相同的定义语句进行视图的创建,并命名为新的视图名称。

也就是视图名称不能直接修改,只能先将原视图删除,再创建一个不同名但内容相同的视图

十二、视图的删除

语法: 

drop view 视图名;

① 删除视图students_name

 ② 查看视图students_name,发现不存在,说明删除成功

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LKsTaRt~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值