视图是一种虚拟的数据表,他们的行为和数据表一样,但并不真正包含数据。它们用底层(真正的)数据表或其他视图定义出来的“假”数据表,用来提供查看数据表的另一种方法,这通常可以简化应用程序。
如果要选取给定数据表的数据列的一个子集,把它定义为一个简单的视图是最简单的做法。加入你经堂需要从president数据表选取last_name,first_name等数据列,但不想每次都必须写出所有这些数据列。如下所示:
SELECT last_name, first_name FROM president;
你可以在president上创建一个视图,让它只包括你想要的数据列:
CREATE VIEW vpres AS SELECT last_name, first_name FROM president;
这样你就可以在这个视图上使用SELECT *,而你看到的将是你在视图定义里给出的那些数据列。
SELECT * FROM vpres;
如果你在查询某个视图还可以使用一个WHERE子句,MySQL将在执行该查询时把它添加到那个视图的定义上以进一步限制检索结果
SELECT * FROM vpres WHERE last_name = 'Admin';
在查询视图时还可以使用ORDER BY、LIMIT等子句,其效果与查询一个真正的数据表时的情况一样。
有些视图是可更新的,这意味着你可以通过对视图进行操作而在其底层数据表里插入、更新或删除数据行。
有了视图机制,就可以在设计数据库应用系统时,对不同的用户定义不同的视图,使机密数据不出现在不应该看到这些数据的用户视图上。这样视图机制就自动提供了对机密数据的安全保护功能。例如,Student表涉及全校15个院系学生数据,可以在其上定义15个视图,每个视图只包含一个院系的学生数据,并只允许每个院系的主任查询和修改本原系学生视图。