1月阅读周·MySQL数据库入门:视图之查看视图篇
背景
去年下半年,我在微信书架里加入了许多技术书籍,各种类别的都有,断断续续的读了一部分。
没有计划的阅读,收效甚微。
新年伊始,我准备尝试一下其他方式,比如阅读周。每月抽出1~2个非连续周,完整阅读一本书籍。
这个“玩法”虽然常见且板正,但是有效,已经坚持阅读十二个月。
已读完书籍:《架构简洁之道》、《深入浅出的Node.js》、《你不知道的JavaScript(上卷)》、《你不知道的JavaScript(中卷)》、《你不知道的JavaScript(下卷)》、《数据结构与算法JavaScript描述》、《WebKit技术内幕》、《前端架构:从入门到微前端》、《秒懂算法:用常识解读数据结构与算法》、《JavaScript权威指南》、《JavaScript异步编程设计快速响应的网络应用》、《编写可测试的JavaScript代码》。
当前阅读周书籍:《MySQL数据库入门》。
视图概述
视图是从一个或多个表中导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表。通过视图不仅可以看到存放在基本表中的数据,并且还可以像操作基本表一样,对视图中存放的数据进行查询、修改和删除。与直接操作基本表相比,视图具有以下优点。
1.简化查询语句
视图不仅可以简化用户对数据的理解,也可以简化对数据的操作。日常开发中可以将经常使用的查询定义为视图,从而使用户避免大量重复的操作。
2.安全性
通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不到也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。
3.逻辑数据独立性
视图可以帮助用户屏蔽真实表结构变化带来的影响。
综上所述,在操作数据库时,由于视图是在基本表上建立的表,它的结构和数据都来自于基本表,因此,诸如更新数据等操作,都可以在视图上进行。
查看视图
查看视图,是指查看数据库中已经存在的视图的定义。查看视图必须要有SHOW VIEW的权限。查看视图的方式有三种,具体如下。
1.使用DESCRIBE语句查看视图
在MySQL中,使用DESCRIBE语句可以查看视图的字段信息,其中包括字段名、字段类型等信息。DESCRIBE语句的基本语法格式如下所示:
DESCRIBE 视图名;
或简写为:
DESC 视图名;
【例1-1】 使用DESCRIBE语句查看stu_class视图,SQL语句如下所示:
DESCRIBE stu_class;
上述SQL语句的执行结果如下所示:
mysql>DESCRIBE stu_class;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id | int(3) | YES | | NULL | |
| name | varchar(20) | YES | | NULL | |
| glass | varchar(50) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.02 sec)
上述执行结果显示出了stu_class视图的字段信息,接下来,针对执行结果中的不同字段进行详细讲解,具体如下。
(1)NULL:表示该列是否可以存储NULL值。
(2)Key:表示该列是否已经编制索引。
(3)Default:表示该列是否有默认值。
(4)Extra:表示获取到的与给定列相关的附加信息。
2.使用SHOW TABLE STATUS语句查看视图
在MySQL中,使用SHOW TABLE STATUS语句可以查看视图的基本信息。SHOW TABLE STATUS语句的基本语法格式如下所示:
SHOW TABLE STATUS LIKE '视图名'
在上述格式中,“LIKE”表示后面匹配的是字符串,“视图名”表示要查看的视图的名称,视图名称需要使用单引号括起来。
【例1-2】 使用SHOW TABLE STATUS语句查看stu_class视图,SQL语句如下所示:
SHOW TABLE STATUS LIKE 'stu_class'\G
上述SQL语句的执行结果如下所示:
mysql>SHOW TABLE STATUS LIKE 'stu_class'\G
*************************** 1. row ***************************
Name: stu_class
Engine: NULL
Version: NULL
Row_format: NULL
Rows: NULL
Avg_row_length: NULL
Data_length: NULL
Max_data_length: NULL
Index_length: NULL
Data_free: NULL
Auto_increment: NULL
Create_time: NULL
Update_time: NULL
Check_time: NULL
Collation: NULL
Checksum: NULL
Create_options: NULL
Comment: VIEW
1 row in set (0.00 sec)
上述执行结果显示了stu_class视图的基本信息,从表中可以看出,表的说明(Comment)项的值为VIEW,说明所查的stu_class是一个视图,存储引擎、数据长度等信息都显示为NULL,说明视图是虚拟表。接下来,同样使用SHOW TABLE STATUS语句查看student表的信息,执行结果如下所示:
mysql>SHOW TABLE STATUS LIKE 'student'\G
*************************** 1. row ***************************
Name: student
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 3
Avg_row_length: 5461
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 9437184
Auto_increment: 4
Create_time: 2014-09-23 09:34:31
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
上述执行结果显示出了student表的基本信息,包括存储引擎、创建时间等,但是Comment项没有信息,说明这个表不是视图,这就是视图和普通表最直接的区别。
3.使用SHOW CREATE VIEW查看视图
在MySQL中,使用SHOW CREATE VIEW语句不仅可以查看创建视图时的定义语句,还可以查看视图的字符编码。SHOW CREATE VIEW语句的基本语法格式如下所示:
SHOW CREATE VIEW 视图名;
在上述格式中,“视图名”指的是要查看的视图的名称。
【例1-3】 使用SHOW CREATE VIEW语句查看stu_class视图,SQL语句如下所示:
SHOW CREATE VIEW stu_class\G
上述SQL语句的执行结果如下所示:
mysql>SHOW CREATE VIEW stu_class\G
*************************** 1. row ***************************
View: stu_class
Create View: CREATE ALGORITHM=UNDEFINED DEFINER='root'@'localhost'
SQL SECURITY DEFINER VIEW 'stu_class' AS select
'student'.'s_id' AS 'id','student'.'name' AS 'NAME',
'stu_info'.'class' AS 'class' from ('student' join
'stu_info') where ('student'.'s_id' = 'stu_info'.'s_id')
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set (0.00 sec)
从上述执行结果可以看出,使用SHOW CREATE VIEW语句查看了视图的名称、创建语句、字符编码等信息。
总结
视图具有简化查询语句、安全性和保证逻辑数据独立性等作用,掌握如何管理视图是非常重要的。
查看视图,是指查看数据库中已经存在的视图的定义。查看视图必须要有SHOW VIEW的权限。
查看视图的方式有三种:使用DESCRIBE语句查看视图、使用SHOW TABLE STATUS语句查看视图、使用SHOW CREATE VIEW查看视图。
作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏⭐️ | 留言📝。
- 点赞
- 收藏
- 关注作者
评论(0)