MySQL中使用视图(create view)

一、什么是视图?

视图是虚拟的表,与包含数据的表不一样,视图不包含数据,只包含使用时动态检索数据的查询。可以理解为:视图只是一条被包装的SQL语句,它可以重复使用,简化了SQL语句的编写操作。同时,因其不包含数据,每次都需要从表中重新检索,因此速度较慢。

二、视图的一些常见应用

  1. 重用的SQL语句
  2. 简化复杂的SQL操作,在编写查询后,可以方便地重用它,而不必知道它的基本查询细节
  3. 使用表的组成部分,而不是整个表
  4. 保护数据,可以给用户授予表的特定部分的访问权限,而不是整个表的访问权限
  5. 更改数据格式和表示,视图可以返回与底层表的表示和格式不同的数据

三、视图的规则和限制

  1. 与表一样,视图必须唯一命名,不能与别的视图或表同名
  2. 对于视图数目,没有限制
  3. 创建视图必须有足够的访问权限
  4. 视图可以嵌套,可以从视图中检索数据构造另一个视图
  5. order by 可用在视图中,但是如果从该视图中检索数据时,也使用了order by ,那么视图中本身的order by 将被覆盖
  6. 视图不能索引,也不能有关联的触发器或默认值
  7. 视图可以和表一起使用,如将视图和表联结

四、使用视图

  1. 创建视图:CREATE VIEW
  2. 查看视图:SHOW CREATE VIEW view_name
  3. 删除视图:DROP VIEW view_name
  4. 更新视图:第一种,先将原视图删除,再重新创建视图;第二种,使用CREATE OR REPLACE VIEW如果原视图不存在,将会创建一个新视图,如果原视图存在,则会替换原视图。

五、例子

1.有下面两张表City和CountryLanguage,表中信息如下:

City表:
在这里插入图片描述
CountryLanguage表:
在这里插入图片描述

2.创建视图
CREATE VIEW city_language AS
SELECT a.name,a.countrycode,a.district,a.population,b.language,b.IsOfficial,b.Percentage
FROM City AS a,CountryLanguage AS b
WHERE a.countrycode = b.countrycode;

该语句无返回结果,仅仅是创建了一个名为city_language 的视图,该视图将两张表按照countrycode列的值进行联结。

从视图中检索数据:

SELECT name,population,percentage
FROM city_language;

返回结果:
在这里插入图片描述

当然,我们也能在创建视图时,使用函数,这些原理和上面类似,最主要还是理解视图是什么,创建视图就不难了。

3.更新视图

视图可以使用INSERTUPDATEDELETE 更新,更新视图实际上就是更新其基表。但是如果MySQL不能正确地确定被更新的基数据,则不允许更新(包括插入和删除)。

如果视图定义中有以下操作,则不能更新视图:

  1. 分组(使用GROUP BYHAVING
  2. 联结
  3. 子查询
  4. 聚集函数(如MIN( )COUNT( )SUM( ) 等)
  5. 使用DISTINCT
  6. 导出(计算)列

六、总结

对于视图,最重要的还是理解视图是什么,可以理解为视图就是一个SQL语句,只不过给这个SQL语句起了一个名字,我们之后不用再重新编写该语句,直接使用它的名字就可以;当我们从视图中检索数据时,MySQL会自动将我们检索的SQL语句和视图的SQL语句合并,给出我们想要的结果,这样就大大简化了我们的操作。

发布了20 篇原创文章 · 获赞 10 · 访问量 1438

猜你喜欢

转载自blog.csdn.net/Jerry_Chang31/article/details/105097491