【mysql】浅谈MYSQL中的基本表、中间表、临时表、派生表和视图

简单介绍
首先我们先了解一下什么叫虚拟表虚拟表,顾名思义就是就是实际上并不存在(物理上不存在),但是逻辑上存在的表。
在MYSQL中存在三种虚拟表:临时表、内存表、视图

1、基本表
基本表是本身独立存在的表,在SQL中一个关系就对应一个表。

2、中间表
中间表它主要是用来兼容数据,建立映射关系,来兼容新老数据表的数据。一般是在实体之间存在多对多的关系时,我们会创建一个中间表实体来给它们两个实体建立起联系,时这个中间表实体与其他两个实体形成一对多的关系,这样可以有效的降低数据的冗余。
比如:我们现在有一个学生表和课程表,这两个实体显然是一种多对多的关系,这时候我们就可以引入一个学生课程表来将他们联系起来,这个表我们可以将学生表和课程表的主键作为它的外键,这要学生表和课程表与学生课程表就是一个一对多的关系,简化了表关系否复杂度。

3、临时表
临时表是建立在系统临时文件夹中的表,如果使用得当,完全可以像普通表一样进行各种操作。 临时表的数据和表结构都储存在内存之中,退出时,其所占的空间会自动被释放。
临时表又分为外部临时表和内部临时表。

1、外部临时表
通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表。这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭。这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除)

创建临时表的两种方式:

CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)    
1
CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name
1
2、内部临时表
内部临时表是一种特殊轻量级的临时表,用来进行性能优化。内部临时表有两种类型:一种是HEAP临时表,这种临时表的所有数据都会存在内存中,对于这种表的操作不需要IO操作。另一种是OnDisk临时表,顾名思义,这种临时表会将数据存储在磁盘上。OnDisk临时表用来处理中间结果比较大的操作。如果HEAP临时表存储的数据大于MAX_HEAP_TABLE_SIZE(详情请参考MySQL手册中系统变量部分),HEAP临时表将会被自动转换成OnDisk临时表。OnDisk临时表在5.7中可以通过INTERNAL_TMP_DISK_STORAGE_ENGINE系统变量选择使用MyISAM引擎或者InnoDB引擎。

创建内部临时表

CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,    value INTEGER NOT NULL)  TYPE=HEAP
1
4、派生表
派生表是从SELECT语句返回的虚拟表。派生表类似于临时表,但是在SELECT语句中使用派生表比临时表简单得多,因为它不需要创建临时表的步骤。
当SELECT语句的FROM子句中使用独立子查询时,我们将其称为派生表。
与子查询不同,派生表必须具有别名,以便稍后在查询中引用其名称。 如果派生表没有别名,MySQL将发出错误
示例
orders表和orderdetails表中获得2013年销售收入最高的前5名产品。

5、视图
视图是从一个或几个基本表导出的表。视图本身不存在独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍然存放在导出视图的基本表中。视图在概念上基本与表等同。视图在概念上与基本表等同,用户可以在基本表那样使用视图,可以在视图上再定义视图。
如何创建视图

create view view_name as
# 这里写SQL语句
————————————————
版权声明:本文为CSDN博主「SunBairn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44863976/article/details/102789392

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章