mysql视图定义、原理、创建、使用

时间:2022-05-27 05:50:42

定义:

  视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是视图并不在数据库中以存储的数据值集形式存在。行和列数据来*定义视图的查询所引用的表,并在引用视图时动态生成。

  对其中所引用的基础表来说,视图的作用类似于筛选。

  定义视图的筛选可以来当自当前或其他数据库的一个或多个表,或其他视图。通过视图进行查询没有任何限制,通过他们进行数据修改时的限制也很少。

  视图是存储在数据库中的查询的SQL语句,他主要出于两种原因:

    安全原因:视图隐藏一些数据,如社会保险基金表,可以用视图只显示姓名、地址,而不显示社会保险号和工资数等

    另一原因:可使复杂的查询易于理解和使用。这个视图就像一个窗口,从中只能看到你想看到的数据列。这意味着你可以在这个视图上使用select *,而你看到的将是你在视图定义里给出那些数据列。

  既然视图的定义是基于基本表的,哪为什么还要定义视图呢?这是因为合理的使用视图能带来很多好处:

  1、视图能简化用户操作

    视图机制使用户可以将注意力集中在所关心的数据上。如果这些数据不是直接来自基本表,则可以通过定义视图,使数据库看起来结构简单、清晰,并且可以简化用户的数据查询操作。

    例如:那些定义了若干张表连接的视图,就将表和表之间的连接操作对用户隐藏起来了。换句话说,用户所做的只是对一个虚表的简单查询,而这个虚表怎么得来的,用户无需了解。

  2、视图使用户能以多种角度看待同一个数据

    数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户应用程序不会受影响。层次数据库和王网状数据库一般能较好的支持数据的物理独立性,而对于逻辑独立性则不能完全的支持

在关系数据库中,数据库的重构造往往是不可避免的。重构数据库最常见的是将一个基本表“”垂直“”地分成多个基本表。

例如,将学生关系student(sno,sname,ssex,sage,sdept) 分成 sx(so,sname,sage) 和 sy(sno,ssex,sdept)两个关系。这时原表student为sx表和sy表自然连接的结果,乳沟建立一个视图student:

create view student(sno,sname,ssex,sage,sdept) as select sx.sno,sx.sname,sy.ssex,sx.sage,sy.sdept sy where sx.sno = sy.sno;

这样尽管数据库的逻辑结构变了(变成了sx和sy两个表),但应用程序不必修改,因为新建的视图定义为用户原来的关系,使用户的外模式保持不变,用户的应用程序通过视图仍然能查找数据。

当然,视图只能在一定程度上提供数据的逻辑独立,比如由于视图的更新是有条件的,因此应用程序中修改数据的语句可能仍会因为基本表构造的改变而改变。

4、视图能够对机密数据提供安全保护

  有了视图机制,就可以在设计数据库应用程序时,对不同的用户定义不同的视图,使机密数据不出现在不应该看到这些数据的用户视图上。