MySQL视图基本操作

1 为什么使用视图

  (1)数据库某些SQL语句使用频率较高,次次都重复编写效率偏低,从而降低了数据库的使用效率;

  (2)数据库某些SQL语句较为复杂,编写困难且语句较多,并不能确保次次都能编写正确,并且错误或低性能的SQL语句往往可能给数据库带来灾难性的影响,通常是查询响应效率偏低,查询周期过长,从而降低了数据的实用性和效能;

  (3)数据库某些查询,需要固定到应用程序中,作为支持应用的功能性使用,需要一种较为方便且安全方式予以支持;

  基于以上因素,MySQL提供了视图特性,以提高SQL语句的复用性和数据表操作的安全性。

  什么是视图?

  (1)视图,可以视为一种封装了sql查询语句的一类存储对象

  (2)视图,本质上是一种虚拟表,其内容与真实的表相似,包含一系列的字段列和记录行数据。

  (3)视图,并不在数据库以实际数据表的方式存在,而是通过定义查询来引用基本表数据,并在具体引用视图时动态生成

  (4)视图,所引用的数据可以被视为封装起来的查询语句数据,并不对所存储的基本表数据产生影响,故而提高了数据库中数据的安全性。

  视图的特点:

  (1)视图的字段列,可以来自于不同的表,是表的抽象和在逻辑意义上建立的新关系。

  (2)视图是由基本表(实表)产生的表(虚表);

  (3)视图的建立和删除不影响基本表;

  (4)对视图内容的更新(添加、删除和修改)直接影响基本表

  (5)当视图来自于多个基本表时,不允许添加和删除数据

2 视图基本操作

2.1 创建视图

2.1.1 创建视图基本语法

  视图是一种虚拟表,在物理上是不存在的,即数据库管理系统没有专门的位置为视图存储数据。

  视图的数据来源于查询语句,因此创建视图的语法为:

  create  view  view_name  as  SQL_Statement;

  注:视图名,不能和表名、也不能和其他视图名重名。

    视图名,推荐命名规范为“view_xxx”或者“v_xxx”。

2.1.2 创建各类视图

  (一)查询类视图创建

  (1)创建常量视图

    示例:create view view_testPI as  select  3.1415926;

  (2)封装使用聚合函数sumavgminmaxcount等)查询语句的视图

    示例:create  view  view_testCount as  select  avg(Salary) from employee;

  (3)封装实现排序功能order by)查询语句的视图

    示例:create  view  view_testOrder as  

          select  WorkID,Name,Salary from employee order by Salary desc;

  (4)封装实现表内连接inner join)查询语句的视图

    示例1:create  view  view_testInnerJoin1 as

          select Name,Salary,e.Department from employee e,department d where e.WorkID=d.WorkID;

    示例2:create  view  view_testInnerJoin2 as

          select Name,Salary,e.Department from employee e inner join department d  on e.WorkID=d.WorkID

  (5)封装实现表外连接left joinright join)查询语句的视图

    示例1:create  view  view_testLeftJoin as 

          select e.WorkID,e.Name,e.JobTitle,d.Department from employee e

            left join department d on e.Department=d.Department;

    示例2:create  view  view_testRightJoin as  

          select e.WorkID,e.Name,e.JobTitle,d.Department from employee e

            right join department d on e.Department=d.Department;

  (6)封装实现子查询相关查询语句的视图

    示例:create view  view_testInChild as

            select  WorkID,Name,Gender,Age,Degree,Department  from employee

            where WorkID in (select WorkID from department);

  (7)封装实现记录联合unionunion all)查询语句的视图

    示例:create view view_testUnion as 

            select  JobTitle,WorkID from employee union select JobTitle,WorkID from department;

2.2 查看视图

2.2.1 全局查看全部视图

  查看数据库内已经创建了哪些视图;

  (1)查看全部的基本表和视图表:

    1)方式1:show tables;

    2)方式2:show full tables;

    3)方式3【查看基本表】:select * from information_schema.tables where table_schema='databaseName';

       示例:select * from information_schema.tables where table_schema='company';

  (2)只查看视图表:

    1)方式1:show full tables where Table_type='VIEW';

    2)方式2:show tables where Tables_in_newtest like 'view_%';

    3)方式3:show full tables where Tables_in_newtest like 'view_%';

    注:方式2和方式3,均需要视图命名带有前缀,如上“view_”所示。

    4)方式4【查看视图表】:select * from information_schema.views where table_schema='databaseName';

       示例:select * from information_schema.views where table_schema='company';

2.2.2 查看具体视图详细信息

 (1)查看视图定义信息【字段及数据类型等】

    语法:describe|desc ViewName;

    示例1:describe view_testorder;

    示例2:desc view_testorder;

  (2)查看视图状态信息

    语法:show  table  status like  'ViewName';

  (3)查看视图定义信息

    语法:show create view ViewName;

    示例:show create view view_testorder;

  (4)查看视图元数据信息

    语法:select * from information_schema.views where table_schema='databaseName' and table_name='viewName';

    示例:select * from information_schema.views where table_schema='company' and table_name='view_testorder';

2.3 删除视图

  语法:drop  view view_Name;

  示例:drop view  view_testPI;

   注:删除表,对基本表没有影响

2.4 修改视图

  修改视图,本质上是对视图语句进行修改,所修改的语句,可能对基本表产生影响,也可能不产生影响。

  若所修改的语句,仅是查询语句,则对基本表

  语法:

  示例:

2.5 利用视图操作基本表

 通过视图对基本表进行操作,主要包括查询、插入、删除、更新操作。

  基于此,视图对基本表数据的操作,可将其分为:查询类视图、插入类视图、删除类视图、更新类视图;

  仅查询类视图,数据可来源于多个基本数据表

  而插入类、删除类、更新类视图,仅能够对单个基本表进行操作。

  涉及对基本表的数据进行插入、删除、更新操作,必须建立在其语句本身可单独正确执行为前提,否则视图运行出错。

  即通过视图对基本表进行的插入、删除、更新操作,同样受基本表本身的约束限制,否则无法正确运行。

2.5.1 视图查询操作

 查询视图,主要是对视图内部为查询类语句进行运行,并显示查询结果。

  (1)显示全部字段及记录信息

    语法:select * from viewName;

    示例:select * from view_testorder;

  (2)显示部分字段及记录信息

    语法:select field1,field2,...,fieldn from viewName;

    示例:select Name,Salary from view_testorder;

2.5.2 视图插入操作

  语法:insert into view_Name (field1,field2,...,fieldN) values (value1,value2,...,valueN);

  示例:insert into view_department (DepartmentID,Department,Manager,WorkID) values (108,'采购部','王俊',202205002);

  注:上述示例,在基本表中存在唯一性、非空约束,故插入新纪录时,必须插入该字段值。

2.5.3 视图删除操作

  语法:delete from view_Name  where field=value;

  示例:delete from view_department where DepartmentID=108;

  注:上述示例中,删除操作是一件很危险的操作,一般按唯一键进行删除,忌按非唯一键删除。

2.5.4 视图更新操作

  语法:update view_Name  set field2=value2 where field1=value1;

  示例:update view_department set Department='研究院' where DepartmentID=107;

  注:上述示例中,更新操作也是一件很危险的操作,一般按唯一键进行更新,忌按非唯一键更新,非唯一键容易造成多条记录都发生更新。

 

3 尾记

  视图给查询操作带来显著的方便,但对插入删除更新操作来说,往往是一场灾难,须谨慎为之。

 

 

posted on 2025-06-08 23:32  LankeHome  阅读(63)  评论(0)    收藏  举报