说明:本文介绍 MySQL 中视图创建、使用、删除
介绍
当你写了一个非常复杂的查询语句,其他地方也需要写一个时,或者你想封装一个查询语句,希望其他人仅能使用,而不能查看语句细节时,就可以为这个查询语句建立一个视图。
视图,本质上是一个预定义的、静态的查询语句。可以理解为编程语言中的方法,封装了一组有逻辑,具体功能的代码块。
例如下面这个查询语句,用于统计某张数据库表的总记录数
-- 统计 i_users_import 表记录行数
select count(1) from i_users_import;
创建
针对上面的查询语句,创建一个视图,如下,其中 count_i_users_import_line 是视图名称
-- 创建视图 [统计 i_users_import 表记录行数]
create view count_i_users_import_line as select count(1) from i_users_import;
执行,在数据库中,出现该视图
使用
在其他地方,要想执行该SQL,直接查询该视图,视图就当作表来用。
-- 查询视图
select * from count_i_users_import_line;
视图不会把查询结果缓存下来,而是查询视图时,等同于执行视图对应的 SQL,所以视图:1)不会提高查询效率;2)查视图和查数据库不会有数据不一致的问题。
如下,删除一条数据
-- 删除一条数据
delete from i_users_import where id = 10001;
再查询,查询时长是 3 秒,和直接执行语句没区别,查询结果减去了一条删除的记录,也和直接用语句查询是一样的
如果你创建的视图,查询出来不止一个字段,可以在查询视图的基础上,指定返回某些字段,如下:
-- 创建视图,id in [10001~20001]
create view id_10001_in_20001 as select * from i_users_import where id > 10001 and id < 20001;
查询视图 id_10001_in_20001,只返回 username 字段,实际就是把视图当作表来用
-- 查询视图 id_10001_in_20001 的 username 字段
select username from id_10001_in_20001;
视图与 SQL 语句不同的是:
(1)视图封装了语句,本地时,你可以将经常使用的语句封装到视图里,后面查数据就很方便,不像语句那样混乱,不好管理;
(2)视图受数据库用户权限管理,可以像存储过程那样,把视图权限分出来,提供安全性;
视图与存储过程不同的是:
(1)存储过程是数据业务逻辑上的封装,视图只是查询语句的封装,这是两者本质上的区别;
(2)存储过程是能传递参数的,视图不能传递参数,只能选择返回的字段列;
删除
删除视图,就像删除数据库表一样,可以敲语句,如下:
-- 删除视图 id_10001_in_20001
drop view id_10001_in_20001;
也可以在数据库连接工具上,鼠标右键,选择删除
总结
本文介绍了 MySQL 视图的创建、使用和删除,并且介绍了视图、SQL语句和存储过程三者的关系。