当前位置:网站首页>【MySQL视图】视图的概念、创建、查看、删除和修改
【MySQL视图】视图的概念、创建、查看、删除和修改
2022-07-29 12:21:00 【嗯嗯好的呢!】
目录
3.使用 show create view/table 语句查看视图创建信息
一、什么是视图
小学的时候,每年都会举办一次抽考活动,意思是从每一个班级里面筛选出几个优秀的同学去参加考试。这时候很多班级筛选出来的这些同学就可以临时组成一个班级,如果我们把每一个班级都当做是一张真实的表,这个临时的班级在数据库里就可以当做一个视图,也就是说,这个临时的班级其实不是真实存在的,当考试过后,这些学生还是各回各家各找各妈。。。。

视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不看整个数据库表中的数据,而只关心对自己有用的数据。视图可以使用户的操作更方便,而且可以保障数据库系统的安全性。
二、创建视图
1.在单表上创建视图
虽然视图可以被看成是一种虚拟表,但是其物理上是不存在的,即MySQL并没有专门的位置为视图存储数据。根据视图的概念可以发现其数据来源于查询语句,因此创建视图的基本语法为:
CREATE[OR REPLACE] VIEW viewname[(columnlist)]
AS SELECT statement
- CREATE表示创建新的视图;
- REPLACE表示替换已经创建的视图;
- [(columnlist)]表示可以显示的指出视图中有哪些列(必须和select语句对应);
- viewname为视图的名称;columnlist为属性列;
- SELECT statement表示SELECT语句;
注意! 创建视图需要登陆用户有相应的权限,查看权限方法:
select user,Select_priv,Create_view_priv from mysql.user;

例如在下面学生表上面创建视图

创建视图SQL语句示例
create view view_student
as select id,name ,class_id,sex from student;
查看视图

通过视图可以检索数据

视图本身相当于一个窗口,通过这个窗口我们也可以修改数据
update view_student set name='小王王' where name='小王';

2.在多表上创建视图
CREATE[OR REPLACE] VIEW viewname[columnlist]
AS SELECT statement
- CREATE表示创建新的视图;
- REPLACE表示替换已经创建的视图;
- viewname为视图的名称;
- columnlist为属性列;
- SELECT statement表示SELECT语句。与单表上创建视图不同的是,SELECT子句是涉及到多表的联合查询语句。
例如在下面教师表和学生表之间创建视图

SQL语句 (视图不允许有列名重复,所以这里的class.id和student.id要起别名
create view view_student_teacher
as select class.id as teacher_id,teacher,class,student.id,student.name,sex
from class
left join student on class.id=student.class_id;

三、查看视图
创建完视图后,像表一样,我们经常需要查看视图信息。在MySQL中,有许多可以实现查看视图的语句,如DESCRIBE、SHOW TABLES、SHOW CREATE VIEW。如果要使用这些语句,首先要确保拥有SHOW VIEW的权限。
1.使用DESCRIBE | DESC语句查看视图基本信息
视图也是一张表,只是这张表比较特殊,是一张虚拟的表,所以同样可以使用DESCRIBE语句来查看视图的基本定义。DESCRIBE语句查看视图的语法如下:
DESCRIBE | DESC viewname;
例如查看上面创建的视图

2.使用SHOW TABLES语句查看视图基本信息
从MySQL 5.1版本开始,执行SHOW TABLES语句时不仅会显示表的名字,同时也会显示视图的名字。
show tables

3.使用 show create view/table 语句查看视图创建信息
SHOW CREATE TABLE|VIEW viewname;

四、更新视图数据
更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图实质是一个虚拟表,其中没有数据,通过视图更新时都是转换到基本表更新。更新视图时,只能更新权限范围内的数据,超出范围就不能更新了。
update view_student set name='小王' where name='小王王';

不能更新的情况:
- 视图中包含SUM()、COUNT()、MAX()和MIN()等函数;
- 视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVING等关键字;
- 视图对应的表存在没有默认值的列,而且该列没有包含在视图里;
- 包含子查询的视图;
- 其他特殊情况;
例如更改view_student_teacher时

五、修改视图
修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图来保持与基本表的一致性。ALTER语句来修改视图。
ALTER VIEW viewname[columnlist]
AS SELECT statement
这个语法中的所有关键字和参数除了alter 外,其他都和创建视图是一样的。
例如修改视图view_student_teacher

SQL语句示例
alter view view_student_teacher
as select teacher,class,name,sex
from class
left join student on class.id=student.class_id;
注意,当真实表中修改了某个存在视图中的字段时,这个视图也需要跟着变,否则会变成无效的视图
例如,修改了student表中的name字段
alter table student change column name name1 varchar(64);
select * from view_student_teaccher;
这时候就需要将视图也跟着修改
alter view view_student_teacher as select teacher,class,name1,sex
from class
left join student on class.id=student.class_id;

六、删除视图
删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。
在MySQL中,可使用DROP VIEW语句来删除视图,但是用户必须拥有DROP权限。删除视图的语法如下:
DROP VIEW viewname [,viewnamen];
- 参数viewname表示所要删除视图的名称,可同时指定删除多个视图。

???
边栏推荐
- influxdb2的使用
- DAY 20 daily SQL clock 】 【 丨 query results of quality and than simple difficult 】 【
- 吴恩达老师机器学习课程笔记 07 正则化
- IDEA2021.2安装与配置(持续更新)
- 记账APP:小哈记账3——登录页面的制作
- 拦截器与过滤器(三)@interface自定义注解拦截
- 【云原生】微服务之Feign的介绍与使用
- DAY 26 daily SQL clock 】 【 丨 advertisement effect difficult simple 】 【
- shell if else 使用
- 金仓数据库KingbaseES安全指南--6.8. SSPI身份验证
猜你喜欢

TiDB upgrade share with case (TiDB v4.0.1 to v5.4.1)

Container is changed | deploy MySQL cluster in the Rancher
![[based] GO language. Why do I have to learn Golang and introduction to the language universal](/img/ac/80ab67505f7df52d92a206bc3dd50e.png)
[based] GO language. Why do I have to learn Golang and introduction to the language universal
![[纯理论] FPN (Feature Pyramid Network)](/img/30/cfb6e3197bc2f4e7e0f1d492976c47.png)
[纯理论] FPN (Feature Pyramid Network)

1.4, stack

容器化 | 在 Rancher 中部署 MySQL 集群

我和 TiDB 的故事 | 缘份在,那就终是能相遇的

Basic Concepts of Kubernetes

MIT指出公开预训练模型不能乱用

MySQL八股文背诵版
随机推荐
PHP uedtior报错 errorHandler is not defined
MySQL 视图(详解)
2022-07-29 Daily: The latest major progress of AlphaFold: complete almost all known protein structure predictions of more than 200 million, fully open
XSS Vulnerability Analysis
Framework common annotation explanation
Paddle frame experience evaluation and exchange meeting, the use experience of the product is up to you!
DAY 22 丨 page daily clock in SQL 】 【 recommend 【 difficulty moderate 】
DAY 25 丨 daily SQL clock 】 【 o team number [difficult medium]
Distributed Configuration Center of Infrastructure
nacos集群搭建
[纯理论] FPN (Feature Pyramid Network)
金仓数据库KingbaseES安全指南--6.8. SSPI身份验证
pycharm专业版使用
Wu En teacher machine learning course notes 6 logistic regression
投资127亿!深圳,再添一所985
IO flow: node flow and process flow summarized in detail.
piglit_get_gl_enum_name 参数遍历
RedisTemplate使用详解
DAY 22 丨 daily SQL clock 】 【 the average selling price of the difficulty of medium 】
QCon大会广州站它来了!独家定制双肩背包等你领取!