当前位置:网站首页>【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表示所要删除视图的名称,可同时指定删除多个视图。

???
边栏推荐
- Wu En teacher machine learning course notes 6 logistic regression
- TiDB upgrade share with case (TiDB v4.0.1 to v5.4.1)
- How much is the test environment, starting from the actual needs
- xxl-job源码解析(技术分享)
- DAY 20 daily SQL clock 】 【 丨 query results of quality and than simple difficult 】 【
- 别再问我如何制作甘特图了!
- 金仓数据库KingbaseES安全指南--6.8. SSPI身份验证
- MySQL database installation (detailed)
- APP本机号码一键登录
- MLX90640 红外热成像仪测温传感器模块开发笔记(九)
猜你喜欢

跨域: 汇总

IDEA 数据库插件Database Navigator 插件
![[Mysql] LENGTH函数](/img/a1/112cac6b42f8c7abec7e4a6629dffd.png)
[Mysql] LENGTH函数

TiCDC synchronization delay problem

CSDN TOP1 "a virgo program ape" how to become a blogger, millions of fans writing

influxdb2的使用

bean的生命周期

Error EPERM operation not permitted, mkdir ‘Dsoftwarenodejsnode_cache_cacach两种解决办法

TiDB升级与案例分享(TiDB v4.0.1 → v5.4.1)

Chapter ten find and record the REST API
随机推荐
【多线程】——synchronized关键字
金仓数据库KingbaseES安全指南--6.7. GSSAPI身份验证
The IDEA of Database plug-in Database Navigator plug-in
MySql string splitting realizes the split function (field splitting, column switching, row switching)
金仓数据库KingbaseES安全指南--6.6. SSL客户端证书认证
QCon Guangzhou Station is here!Exclusive custom backpacks are waiting for you!
【C语言】扫雷游戏实现(初阶)
我和 TiDB 的故事 | 缘份在,那就终是能相遇的
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及
小程序云函数实现微信支付如此简单
AI cocoa AI frontier introduction (7.29)
DAY 26 daily SQL clock 】 【 change 丨 restaurant turnover growth difficulty moderate 】 【
Based article 】 【 learn with Rust | Rust function and process control, rounding
2022-07-29 Daily: The latest major progress of AlphaFold: complete almost all known protein structure predictions of more than 200 million, fully open
2022年编程语言排名,官方数据来了,让人大开眼界
TiDB升级与案例分享(TiDB v4.0.1 → v5.4.1)
MySQL常用的日期时间函数
"Qidong well day lily" is the national geographical indications protection products?Ants investigation on July 29, the answer
Draw boxes of WPF screenshots controls and ellipse (4) "imitation WeChat"
Framework common annotation explanation