7、MySQL数据库的视图操作

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:

上一张内容在结尾阶段引入了MySQL数据库的视图概念,本章将纤细介绍视图的集中用法。在创建视图之前先创建学生表,学院表和学员信息表,通过使用视图对着三张表的操作,使我们对视图有一个基本的认识和了解。

使用视图的原则:

1、视图名字唯一性

2、视图的创建个数不受限制,用户可以创建多个视图

3、用户创建视图,必须从数据库管理员得到权限。

4、视图可以嵌套,

5、一些数据库管理系统禁止用户在查询语句中使用order by子句。

一、创建实用表数据

创建学生表

1
2
mysql>  create  table  studenginfo(sno  int (4) zerofill,sname  varchar (18),sex ENUM( '男' , '女' not  null  default  '女' ,address  varchar (48)  default  '北京' ,dno  int (3));
Query OK, 0  rows  affected (0.07 sec)

创建学院表

1
2
3
4
5
6
7
8
9
10
11
create  table  recruitinfo(address  varchar (18)  not  null ,score  float  not  null ,snum  int (3)  not  null );
Query OK, 0  rows  affected (0.08 sec)
mysql> show  create  table  department\G;
*************************** 1. row ***************************
        Table : department
Create  Table CREATE  TABLE  `department` (
   `dno`  int (2)  NOT  NULL ,
   `dname`  varchar (18)  NOT  NULL ,
   `dnum`  int (3)  NOT  NULL  DEFAULT  '0'
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8
1 row  in  set  (0.00 sec)

为学生表创建索引

1
mysql>  create  index  name_index  on  studentinfo (sname);

二、视图:

视图作为查询数据的另外一种形式,利用视图,用户可以集中、简化和定制数据库,同时提供了安全保证

视图是从一个或过个表中导出的表,其结构和数据是建立在对标的查询基础之上的。就本质而言,视图是一张虚表。

视图创建语法:

1
2
create  view  <view_name> [column1,column2...]  as
select  <column_name>  from  <tb_name>;

其中[column1,column2,...]为可选项,缺省是子查询结果中的字段名,select语句指明了视图中的字段机器数据。

强调:

1、视图创建后,只在数据字典中存放视图的定义,而其中的select语句并不执行

2、只有当用户对视图进行操作时,才按照视图的定义将数据从基本表中取出。

创建视图:

1、创建一个与studentinfo相同信息的视图

1
2
mysql>  create  view  studentinfo_view  as  select  from  studentinfo;
select  from  studentinfo_view;

2、为视图创建视图

1
mysql>  create  view  boy_view  as  select  from  studentinfo_view  where  sex= '男' ;

3、为列创建视图并查看其信息

1
mysql>  create  view  nameaddress_view  as  select  sname,address  from  studentinfo;

4、创建与表具有不同字段名的视图

1
2
mysql>  create  view  New_view(boy_name,boy_address)  as  select  sname,address  from  studentinfo  where  sex= '男' ;
Query OK, 0  rows  affected (0.00 sec)

5、利用视图简化表的复杂连接

创建一个关于学生信息表(studentinfo)、招生信息表(Recruitinfo)和Department的关联。

sname、dname和dnum三个字段。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql>  create  view  join_view  as  select  sname,dname,score  from  studentinfo s,department d,recruitinfo r  where  s.address=r.address  and  s.dno=d.dno;
Query OK, 0  rows  affected (0.00 sec)
mysql>  select  from  join_view;
+ -----------+--------------------+-------+
| sname     | dname              | score |
+ -----------+--------------------+-------+
| 张平      | 汽车系             | 648.5 |
| 李山      | 电子工程系         |   560 |
| 王彤      | 汽车系             | 654.5 |
| 张伟      | 计算机工程系       |   638 |
| 高守传    | 机械工程           |   650 |
| 刘红      | 工程物理系         | 629.5 |
| 张勇      | 应用数学系         |   625 |
| 刘晓      | 电子工程系         |   650 |
| 吴军      | 电子工程系         |   631 |
| 张大山    | 材料工程系         |   635 |
+ -----------+--------------------+-------+
10  rows  in  set  (0.03 sec)

6、视图简化复杂查询的过程

6.1 给予学生表,创建boys_view视图,包含所有男同学信息

1
mysql>  create  view  boys_view  as  select  from  studentinfo  where  sex= '男' ;

给予recruitinfo表,创建视图score_view,包含录取分数高于630的所有学生的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql>  create  view  boyscore_view  as  select  from  score_view  where  sno  in  ( select  sno  from  boys_view);
mysql>  select  from  boyscore_view;
+ ------+-----------+-----+---------+------+
| sno  | sname     | sex | address | dno  |
+ ------+-----------+-----+---------+------+
| 0005 | 高守传    | 男  | 山东    |    3 |
| 0004 | 张伟      | 男  | 浙江    |    1 |
| 0009 | 吴军      | 男  | 山西    |    4 |
| 0010 | 张大山    | 男  | 陕西    |    7 |
+ ------+-----------+-----+---------+------+
rows  in  set  (0.00 sec)
mysql>  create  view  result_view (sname,dname)  as  select  boyscore_view.sname,department.dname  from  boyscore_view,department  where  boyscore_view.dno=department.dno;
Query OK, 0  rows  affected (0.00 sec)

删除视图

语法:drop view view_name

drop view studentinfo_view

注意:视图在物理上是不存在的,只是一个查询结果,是一个被存储的查询。create view语句只是保存了视图的定义,所以在使用drop view语句删除视图时,删除的也只是视图的定义,对实际表中的数据没有影响。


本文转自 CARYFLASH 51CTO博客,原文链接:http://blog.51cto.com/maoxiaoxiong/1983954


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
62 4
|
3月前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
51 0
|
18天前
|
SQL 存储 关系型数据库
mysql-视图的定义和简单使用
这篇文章介绍了MySQL中视图的定义和简单使用方法,包括视图的创建规则和使用限制。通过一个实际的例子,展示了如何创建视图以及如何使用视图来简化复杂的SQL查询操作。
mysql-视图的定义和简单使用
|
1月前
|
存储 缓存 关系型数据库
MySQL 视图:数据库中的灵活利器
视图是数据库中的虚拟表,由一个或多个表的数据经筛选、聚合等操作生成。它不实际存储数据,而是动态从基础表中获取。视图可简化数据访问、增强安全性、提供数据独立性、实现可重用性并提高性能,是管理数据库数据的有效工具。
|
2月前
|
存储 关系型数据库 MySQL
|
3月前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
41 2
|
3月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
SQL 安全 关系型数据库
MySQL创建视图(CREATE VIEW)13
【7月更文挑战第13天】创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
54 1