07_MySQL视图的操作

Capture 07 视图的操作

?为什么使用视图

视图可以简化查询,还可以提高安全性。视图本质上是一种虚拟表,只保存了sql的逻辑,其内容与真实的表相似,包含一系列带有名称的列和行数据。视图的特点如下:

  • 视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系
  • 视图是由基本表(实表)产生的表(虚表)
  • 视图的建立和删除不影响基本表
  • 对视图内容的更新直接影响基本表

?创建视图

?创建视图的语法形式

create view view_name as DQL;

和创建其他表一样,视图名不能和表名、也不能和其他的视图名重名。DQL是比较复杂的sql语句,一般为查询语句。因此,可以将视图理解为对复杂查询语句的封装。

?创建各种视图

由于视图可以理解为对查询语句的封装,因此大部分查询语句均可以写入视图中。

  1. 可以封装常量语句
  2. 可以封装使用聚合函数查询语句
create view view_name as select count(property_name) from table_name;
  1. 封装排序功能
  2. 封装表内连接查询语句
  3. 封装实现表外连接查询语句
  4. 封装实现子查询相关语句
create view view_name as select property_name1 from table_name1 as name1 where name1.property_name2 in (select property_name3 from table_name2)
  1. 封装实现记录联合查询语句

?查看视图

?SHOW TABLES语句查看视图名

从MySQL 5.1开始,SHOW TABLES语句不仅会显示表的名字,同时也会显示出视图的名字。

?SHOW TABLE STATUS语句查看视图详细信息

和SHOW TABLE语句一样,SHOW TABLE STATUS语句不仅会显示表的详细信息,同时也会显示视图的详细信息。

show table status [from db_name] [like 'pattern'];

show table status返回字段含义:

字段名 含义
Name 表和视图的名字
Engine 表的存储引擎
Version 表的.frm文件的版本号
Row_format 表的行存储格式
Rows 表中行的数目
Avg_row_length 表中行的平均长度
Data_length 表数据文件的长度
Max_data_length 表数据文件的最大长度
Index_length 表索引文件的长度
Data_free 表被排序后未使用的字节的数目
Auto_increment 表中下一个AUTO_INCREMENT值
Create_time 表的创建时间
Update_time 表的最后一次更新时间
Check_time 表的最后一次检查时间
Collation 表的字符集
Checksum 表的活性校验
Create_options 表的额外选项
Comment 表的注解

?SHOW CREATE VIEW查看视图定义信息

show create view view_name;

该语句会返回两个字段,分别为表示视图名的View字段和关于视图定义的Create View字段。

?DESCRIBE|DESC语句查看视图设计信息

如果要查询相关视图的设计信息,可以通过语句DESCRIBE或DESC来实现,与查询表格的设计信息相同。

describe|desc view_name;

?通过系统表查看视图信息

当MySQL数据库安装成功后,会自动创建系统数据库information_schema。该数据库中存在一个包含试图信息的表格views,可以通过查看该表格以获取所有视图的相关信息。

?删除视图

?删除视图的语法形式

drop view view_name1, view_name2 ......;

上述语句中,view_name参数表示所有要删除视图的名称。

?修改视图

?CREATE OR REPLACE VIEW修改视图

对于已经创建好的表,尤其是已经有大量数据的表。通过先删除,然后再按照新的表定义重建的方式修改表是,需要做许多额外的工作,例如数据的重新加载等等。可是对于视图而言,由于其本身就是一个虚表,并没有存储数据,因此完全可以通过该方式进行修改。

create or replace view view_name as DQL;

使用上述语句时,MySQL会自动进行删除和重建功能。

?ALTER修改视图

ALTER语句与CREATE OR REPLACE功能相似。

alter view view_name as DQL;

?利用视图操作基本表

?检索(查询)数据

通过视图查询数据,与通过表进行查询完全相同,只不过通过视图查询比表更安全、更简单、实用。

select * from view_name;

?利用视图操作基本表数据

?添加数据操作

insert into view_product
(property_name1, property_name2, ......, property_namen)
values
(value1, value2, ......, valuen);

由于values后面的数据常量与视图中的列一一对应,因此也可以不写。

视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的:

  • 分组函数、distinct、group by、having、union或者union all
  • 常量视图
  • Select中包含子查询
  • from一个不可更新的视图
  • where子句的子查询引用了from子句中的表

?删除数据操作

delete from view_name where ...;

?更新数据操作

update view_name set ... where ...;

你可能感兴趣的:(MySQL数据库,MySQL数据库,视图)