目录
1.使用create or replace view语句修改视图
视图是从一个或多个表中导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表,通过视图不仅可以看到存放在基本表中的数据,还可以像操作基本表一样,对试图中存放的数据进行查询、修改和删除。与直接操作基本表相比,视图具有以下优点。
1.简单化
视图不仅可以简化用户对数据的理解,也可以简化对数据的操作。那些被经常使用的查询定义为视图,从而使用户在以后的操作中不必每次都指定全部的条件。
2.安全性
通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据是看不到的。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定的行和列上。
3.逻辑数据独立性
视图可以帮助用户屏蔽真实表结构变化带来的影响。
【任务5.1】使用语句创建视图
1.创建视图
视图中包含了select的查询结果,因此视图的创建基于select语句和已存在的数据表。视图可以建立在一张表上,也可以建立在多张表上。在mysql中创建视图使用create view语句,其基本语法格式为:
create [or replace] [algorithm = {undefined | merge | temptable}]
view [view_name [(column_list)]]
as [select_statement]
[with [cascaded | local] check option]
在上述语法格式中,每个部分的含义如下:
create:表示创建视图的关键字,上述语句能创建新的视图。
or replace:如果给定了此子句,表示该语句可以替换已有视图。
algorithm:可选项,表示视图选择的算法。
undefined:表示mysql将自动选择所要使用的算法。
merge:表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。
temptable:表示将视图的结果存入临时表,然后使用临时表执行语句。
view_name:表示要创建的视图名称。
column_list:可选项,表示字段名清单。指定了视图中各个字段名,默认情况下,与select语句中查询的字段名相同。
as:表示指定视图要执行的操作。
select_statement:一个完整的查询语句,表示从某个表或视图中查出某些满足条件的记录,将这些记录导入视图中。
with check option:可选项,表示创建视图时要保证在该视图的权限范围之内。
cascade:可选项,表示创建视图时,需要满足与该视图有关的所有相关视图和表的条件,该参数为默认值。
local:可选项,表示创建视图时,只要满足该视图本身定义的条件即可。该语句要求具有针对视图的create view权限,以及针对由select语句选择的每一列上的某些权限,对于在select语句中其他地方使用的列,必须具有select权限。如果还有or replace子句,必须在视图上具有drop权限。
视图属于数据库。在默认情况下将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为:database_name.view_name。
2.视图的规则和限制
创建视图前,应该知道它的一些规则。视图创建和使用最常见的规则和限制如下。
①与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名称)。
②对于可以创建的视图数目没有限制。
③为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。
④视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。
⑤order by可以用在视图中,但如果在该视图检索数据select中也含有order by,那么该视图中的order by将被覆盖。
⑥视图不能索引,也不能有关联的触发器或默认值。
⑦视图可以和表一起使用。例如编写一条连接表和视图的select语句。
【任务5.2】修改视图
修改视图是指修改数据库中存在的视图,例如,当基本表的某些字段发生变化时,可以通过修改视图的方式来保持视图与基本表的一致性。在MySQL中,可以通过create or replace view语句和alter语句来修改视图。
1.使用create or replace view语句修改视图
在MySQL中,使用create or replace view语句修改视图,其语法格式为:
create [or replace] [algorithm = {undefinded|merge|
temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded|local]check option]
可以看到修改视图的语句和创建视图的语句完全是一样的。如果视图已经存在,那么使用修改语句对视图进行修改;如果视图不存在,那么将创建一个新视图。
2.使用alter语句修改视图
alter语句是MySQL提供的另外一种修改视图的方法,其修改视图的语法格式为:
alter [algorithm = {undefined|merge|temptable}]
view view_name[(column_list)]
as select_statement
[with[cascaded|local]check option]
【任务5.3】利用视图更新数据表
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。当通过视图更新数据时,其实是在更新基本表中的数据,如果对视图增加或删除记录,实际上是对基本表增加或删除记录。视图更新主要有3种方法:update、insert、delete。
1.使用update语句更新视图
在MySQL中,可以使用update语句对视图中原有的语句进行更新。
2.使用insert语句更新视图
在MySQL中,可以使用insert语句对视图中的基本表插入一条记录。
3.使用delete语句更新视图
在MySQL中,可以使用delete语句对视图中的基本表删除部分记录。
需要注意的是,尽管更新视图有多种方式,但并非所有情况下都能执行视图的更新操作。当视图中包含如下内容时,视图的更新操作将不能被执行。
(1)视图中不包含基本表中被定义为非空的列。
(2)在定义视图的select语句后的字段列表中使用了数学表达式。
(3) 在定义视图的select语句后的字段列表中使用了聚合函数。
(4)在定义视图的select语句中使用了distinct、union、limit、group by或having子句。
【任务5.4】删除视图
当视图不在需要时,可以将其删除,删除视图时,只会删除视图的定义,不会删除数据。删除一个或多个视图可以使用drop view语句,其基本语法格式为:
drop view [if exists] view_name [,view_name]... {restrict|cascade};
其中,“view_name”是要删除的视图名称,可以添加多个需要删除的视图名称,各个名称之间使用逗号分隔开。删除视图必须拥有drop权限。