数据表中的视图操作
文章目录
- 一、视图概述
- 二、为什么要使用视图
- 三、创建视图
- 四、查看视图
一、视图概述
小学的时候,每年都会举办一次抽考活动,意思是从每一个班级里面筛选出几个优秀的同学去参加考试,这时候很多班级筛选出来的这些同学就可以临时组成一个班级,如果我们把每个班级都当做是一张真实的表,这个临时的班级在数据库里就可以当作一个视图,也就是说,这个临时的班级其实不是真实存在的,当考试过后,这些学生还是会回到各自的班级中。所以说视图是从一个或多个表中导出来的表,是一种虚拟存在的表。视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据,这样用户可以不看整个数据库表中的数据,而只关心对自己有用的数据。视图可以使用用户的操作更方便,而且可以保障数据库系统的安全性。
二、为什么要使用视图
数据库中关于数据的查询有时非常复杂,例如表连接、子查询等,这种查询会让程序员感动非常痛苦,因为它的逻辑太复杂、编写语句比较多,当这种查询需要重复使用时,很难每次都编写正确,从而降低了数据库的实用性。
在具体操作表之前,有时候要求只能操作部分字段,而不是全部字段,例如在学校里,学生的智商测试结果一般都是保密的,如果因为一时疏忽向查询中多写了关于“智商”的字段,则会让学生的智商显示给所有能够查看该查询结果的人,这时就需要限制使用者操作的字段。
为了提高复杂的SQL语句的复用性和表的操作的安全性,MySQL数据库管理系统提供了视图特性。所谓视图,本质上是一种虚拟表,其内容与真实表相似,包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储数据值的形式存在,行和列数据来自定义视图的查询所引用的基本表,并且在具体引用视图时动态生成。
视图使程序员只关心感兴趣的某些特定数据和他们所负责的特定任务,这样程序员只能看到视图中所定义的数据,而不是视图所引用表中的数据,从而提高数据库中数据的安全性。
三、创建视图
虽然视图可以被看成是一种虚拟表,但是其物理上是不存在的,即MySQL并没有专门的位置为视图存储数据。根据视图的概念可以发现其数据来源于查询语句,因此创建视图的基本语法为:
CREATE[OR REPLACE]VIEW viewname[columnlist] AS SELECT statement
其中,CREATE表示创建新的视图;REPLACE表示替换已经创建的视图;viewname为视图的名称;columnlist为属性列;SELECT statement表示SELECT语句。
注意:创建视图需要登陆用户有相应的权限,查看权限方法。
在单表上创建视图:
在多表上创建视图:
CREATE[OR REPLACE] VIEW viewname[columnlist] AS SELECT statement
其中,CREATE表示创建新的视图;REPLACE表示替换已经创建的视图,viewname为视图的名称,columnlist为属性列,SELECT statement表示SELECT语句;与单表上创建视图不同的是,SELECT子句是设计到多表的联合查询语句。
四、查看视图
创建完视图后,像数据表一样,我们经常需要查看视图信息。在MySQL中,有许多可以实现查看视图的语句,如DESCRIBE、SHOW TABLES、SHOW CREATE VIEW。如果要使用这些语句,首先要确保拥有SHOW VIEW的权限。
1.使用DESCRIBE|DESC语句查看视图基本信息
前面我们已经详细了解使用DESCRIBE语句来查看表的基本定义。因为视图也是一张表,只是这张表比较特殊,是一张虚拟的表,所以同样可以使用DESCRIBE语句来查看视图的基本定义。DESCRIBE语句查看视图的语法如下:
DESCRIBE|DESC viewname;
在上述语句中,参数viewname表示所要查看设计信息的视图名称。
2.使用show create view/table 语句查看视图创建信息
SHOW CREATE TABLE 或 VIEW viewname;
3.更新视图数据
更新视图是指通过视图来插入(INSERT)、更新(UPDATE)和删除(DELETE)表中的数据。因为视图实质上是一个虚拟表,其中没有数据,通过视图更新时都是转换到基本表更新。更新视图时,只能更新权限范围内的数据,超出范围就不能更新了。
不能更新的情况:
- 视图中包含SUM()、COUNT()、MAX()和MIN()等函数。
- 视图中包含UNION、UNION ALL、DISTINCT、GROUP BY和HAVING等关键字。
- 视图对应的表存在没有默认值的列,而且该列没有包含在视图中。
- 包含子查询的视图。
4.修改视图
修改视图是指修改数据库中存在的视图,当基本表的某些字段发生变化的时候,可以通过修改视图来保持与基本表的一致性。ALTER语句来修改视图。
使用ALTER语句修改视图:
ALTER VIEW viewname[columnlist] AS SELECT statement
这个语法中的所有关键字和参数除了alter外,其他都和创建视图是一样的,因此不再赘述。
5.删除视图
删除视图是指删除数据库中已存在的视图,删除视图时,只能删除视图的定义,不会删除数据。在MySQL中,可以使用DROP VIEW语句来删除视图,但是用户必须拥有DROP权限。删除视图的语法如下:
DROP VIEW viewname [,viewname];
在上述语句中,参数viewname表示所要删除视图的名称,可同时指定删除多个视图。