文章目录

  • 开篇先介绍一下视图
  • 一. 创建视图
  • 1.创建视图的语法形式如下:
  • 2.创建视图有如下限制:
  • 3.在单表上创建视图。MySQL中可以在单个表上创建视图。
  • 4.在多表上创建视图。MySQL数据库中也可以在两个或两个以上的表上创建视图。
  • 5.在已存在的视图上创建视图
  • 6.说明:
  • 二.查看视图的定义
  • 1.describe语句查看视图基本信息。
  • 2.利用show table status语句查看视图基本信息。
  • 3.利用show create view语句查看视图详细信息。
  • 4.在views表中查看视图详细信息。
  • 三 .修改视图
  • 1.MySQL中,`create or replace view`语句可以用来修改视图。该语句的使用非常灵活。在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。
  • 2.在MySQL中,`alter`语句可以修改表的定义,可以创建索引。不仅如此,`alter`语句还可以用来修改视图。
  • 五.删除视图
  • 对需要删除的视图,使用`drop view`语句进行删除。


开篇先介绍一下视图

  视图是从一个或者多个表及其他视图中通过select语句导出的虚拟表,数据库中只存放了视图的定义,而并没有存放视图中的数据。浏览视图时所对应数据的行和列数据来自定义视图查询所引用的表,并且在引用视图时动态生成。通过视图可以实现对基表数据的查询与修改。

一. 创建视图

创建视图是指在指定的数据库表上建立视图。视图可以建立在一张表上,也可以建立在多张表或既有视图上。要求创建用户具有针对视图的create view权限,以及针对由select语句选择的每一列上的某些权限。

1.创建视图的语法形式如下:

create [or replace][algorithm ={ undefined|merge|temptable }]
view view_name [(column_list)]
as select_statement
[ with[ cascaded|local] check option ] ;

2.创建视图有如下限制:

在视图的from子句中不能使用子查询。
在视图的select语句不能引用系统或用户变量。
在视图的select语句不能引用预处理语句参数。
在视图定义中允许使用order by,但是,如果从特定视图进行了选择,而该视图使用了具有自己order by的语句,它将被忽略。
在定义中引用的表或视图必须存在。但是,创建了视图后,能够舍弃定义引用的表或视图。要想检查视图定义是否存在这类问题,可使用check table语句。
在定义中不能引用temporary表,不能创建temporary视图。
不能将触发程序与视图关联在一起。

3.在单表上创建视图。MySQL中可以在单个表上创建视图。

如在teacher表上创建一个简单的视图,视图名称为teach_view1。

mysql> create view teach_view1
    -> as select * from teacher;

mysql物化视图创建 mysql视图创建与管理_mysql物化视图创建


可以利用select语句查询视图teach_view1的数据如下。

mysql> select * from teach_view1;

mysql物化视图创建 mysql视图创建与管理_mysql_02

4.在多表上创建视图。MySQL数据库中也可以在两个或两个以上的表上创建视图。

例如:在student表、course表和score表上创建一个名为stu_score1的视图。视图中保留18级的女生的学号、姓名、电话、课程名和期末成绩。

mysql> create  view  stu_score1
-> as select  student.studentno, sname, phone, cname,final
-> from  score  join student  on  student.studentno=score. studentno
-> join  course  on  course.courseno=score.courseno
-> where  sex=‘女’  and  left(student.studentno,2)= ‘18’;

mysql物化视图创建 mysql视图创建与管理_mysql_03


此视图保存有3个表的数据,可以利用select语句查询视图stu_score1的数据如下。

mysql> select * from stu_score1;

mysql物化视图创建 mysql视图创建与管理_mysql_04

5.在已存在的视图上创建视图

如:创建视图teach_view2,统计计算机学院的教师中的教授和副教授的教师号、教师名和专业。

mysql> create view teach_view2
-> as select teacherno, tname, major
-> from teach_view1
-> where prof like ‘%教授’ and department=‘计算机学院’;

mysql物化视图创建 mysql视图创建与管理_MySQL_05


可以通过用select语句查看视图teach_view2的数据如下。

mysql> select * from teach_view2;

mysql物化视图创建 mysql视图创建与管理_MySQL_06

6.说明:

(1)定义视图时基本表可以是当前数据库的表,也可以来自于另外一数据库的基本表,只要在表名前添加数据库名称即可,如mysql.student02。
(2)定义视图时可在视图名后面指明视图列的名称,名称之间用逗号分隔,但列数要与select语句检索的列数相等。例如,定义视图teach_view2可以写成如下方式:

create view  teach_view2(教师号,教师名,专业)
as select  teacherno, tname, major ……

(3)使用视图查询时,若其基本表中添加了新字段,则该视图将不包含新字段。
(4)如果与视图相关联的表或视图被删除,则该视图将不能再使用。


😀何云辉 CSDN


二.查看视图的定义

查看视图是指查看数据库中已存在的视图的定义。查看视图必须要有show view的权限,在MySQL数据库下的user表中保存着这个信息。
查看视图的方法包括describe语句、show table status语句、show create view语句和查询information_schema数据库下的views表等。

1.describe语句查看视图基本信息。

可以使用describe语句可以查看表的基本定义。同样可以使用describe语句可以用来查看视图的基本定义。describe语句查看视图的基本形式与查看表的形式是一样的。

2.利用show table status语句查看视图基本信息。

MySQL中,可以使用show table status语句来查看视图的信息。其语法形式如下:

show table status like ‘view_name’;

3.利用show create view语句查看视图详细信息。

MySQL中,show create view语句可以查看视图的详细定义。语法形式如下

show create view view_name

4.在views表中查看视图详细信息。

MySQL数据库中,所有视图的定义都存在information_schema数据库下的views表中。例如,查询information_schema.views 表,可以查看到数据库中所有视图的详细信息。代码如下:

select * from information_schema.views;

其中,*表示查询所有的列的信息;
information_schema.views表示information_schema数据库下面的views表。

三 .修改视图

修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。MySQL中通过create or replace view语句和alter语句来修改视图。

1.MySQL中,create or replace view语句可以用来修改视图。该语句的使用非常灵活。在视图已经存在的情况下,对视图进行修改;视图不存在时,可以创建视图。

create or replace view语句的语法形式如下:

CREATE OR REPLACE [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}]
          VIEW 视图名[(属性清单)]
          AS SELECT语句
          [WITH [CASCADED|LOCAL] CHECK OPTION];

2.在MySQL中,alter语句可以修改表的定义,可以创建索引。不仅如此,alter语句还可以用来修改视图。

alter语句修改视图的语法格式如下:

alter [algorithm = {undefined|merge|temptable}]
view view_name [(column_list)]
as select语句
[with [cascaded|local]check option];

例如:修改视图teach_view2,统计计算机学院和材料学院的教师中的教授和副教授的教师号、教师名、和专业,并在视图名后面指明视图列名称。

mysql>  alter view  teach_view2(教师号,教师名,专业)
-> as select  teacherno, tname, major
-> from  teach_view1
-> where  prof  like  '%教授'  
-> and  (department=‘计算机学院’ or department=‘材料学院’ );

mysql物化视图创建 mysql视图创建与管理_mysql物化视图创建_07


可以通过用select语句查看视图teach_view2的数据如下。

mysql> select  * from  teach_view2;

mysql物化视图创建 mysql视图创建与管理_MySQL_08

五.删除视图

删除视图是指删除数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。MySQL数据库中,用户必须拥有drop权限才能使用drop view语句来删除视图。

对需要删除的视图,使用drop view语句进行删除。

drop view命令可以删除多个视图,各视图名之间用逗号分隔。基本格式如下:

drop view [if exists]视图名列表 [restrict|cascaded]

例如,删除视图V1_student命令如下:

drop view V1_student;