视图可以简化查询,还可以提高安全性。视图本质上是一种虚拟表,只保存了sql的逻辑,其内容与真实的表相似,包含一系列带有名称的列和行数据。视图的特点如下:
create view view_name as DQL;
和创建其他表一样,视图名不能和表名、也不能和其他的视图名重名。DQL是比较复杂的sql语句,一般为查询语句。因此,可以将视图理解为对复杂查询语句的封装。
由于视图可以理解为对查询语句的封装,因此大部分查询语句均可以写入视图中。
create view view_name as select count(property_name) from table_name;
create view view_name as select property_name1 from table_name1 as name1 where name1.property_name2 in (select property_name3 from table_name2)
从MySQL 5.1开始,SHOW TABLES语句不仅会显示表的名字,同时也会显示出视图的名字。
和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 view_name;
该语句会返回两个字段,分别为表示视图名的View字段和关于视图定义的Create View字段。
如果要查询相关视图的设计信息,可以通过语句DESCRIBE或DESC来实现,与查询表格的设计信息相同。
describe|desc view_name;
当MySQL数据库安装成功后,会自动创建系统数据库information_schema。该数据库中存在一个包含试图信息的表格views,可以通过查看该表格以获取所有视图的相关信息。
drop view view_name1, view_name2 ......;
上述语句中,view_name参数表示所有要删除视图的名称。
对于已经创建好的表,尤其是已经有大量数据的表。通过先删除,然后再按照新的表定义重建的方式修改表是,需要做许多额外的工作,例如数据的重新加载等等。可是对于视图而言,由于其本身就是一个虚表,并没有存储数据,因此完全可以通过该方式进行修改。
create or replace view view_name as DQL;
使用上述语句时,MySQL会自动进行删除和重建功能。
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后面的数据常量与视图中的列一一对应,因此也可以不写。
视图的可更新性和视图中查询的定义有关系,以下类型的视图是不能更新的:
delete from view_name where ...;
update view_name set ... where ...;