试试吧

全部免费,试试吧致力于打造领先的一站式在线工具平台!

加载中...

MySQL8 存储视图

MySQL8 存储视图,MySQL8教程,介绍 MySQL8 存储视图和示例。

全栈教程https://try8.cn/article

教程目录:
教程内容:
最近更新:2023-04-17

一、MySQL8 存储视图介绍

MySQL8 存储视图是一种存储对象类型,一般可以理解为虚拟表或逻辑表,返回类似于行和列组成的数据,通过视图查询的数据是动态变化的,存储视图名称和表名称共享命名空间,所以要遵守表的命名规则。


1.1、存储视图优点

在 SQL 中使用存储视图有很多优点:

  • 存储视图可以使用更少的 SQL 语句简化复杂的查询;
  • 存储视图有利于限制访问,例如给用户仅公开非敏感数据;
  • 存储视图可以直接启用动态计算列;
  • 无须频繁修改表,具有更好的兼容性。


1.2、存储视图缺点

在使用存储视图时可能会影响查询性能,且不支持在存储视图上创建索引,如果存储视图引用的相关表结构变化时,您可能也需要同时修改一遍对应的存储视图定义。


1.3、存储视图机制

MySQL8 支持三种算法的存储视图,分别是:merge、temptable、undefined:

  • merge:合并算法,将外部查询与内部查询合并一起,不支持聚合列和无表查询;
  • temptable:临时表算法,创建一个临时表用于查询数据,效率略低;
  • undefined:默认算法,未显示指定算法或指定算法失效时自动选择。


MySQL8 存储视图约束规则:

  • select 语句不能引用系统变量或者用户变量;
  • 存储视图引用的表或者视图必须存在;
  • 存储视图定义不能引用 temporary;
  • 您不能将触发器和存储视图相关联;
  • 存储视图最大支持 64 个列。


二、MySQL8 存储视图教程

2.1、创建存储视图

首先,我们通过编写一个简单的存储视图,来介绍存储视图的语法。

create algorithm=merge view try8_view as
    select try8_id, try8_name from try8_tb where try8_name = 'ok'
with check option; 


存储视图关键字说明:

  • create view:用于创建存储视图,该关键字后面指定可选参数加名称;
  • algorithm:可选值,选项有:merge、temptable、undefined;
  • as:声明存储视图的主体,您可以将 SQL 放在正文中以处理业务逻辑;
  • with check option:可选值,测试 where 条件是否符合标准。


2.2、查看存储视图

# 查看字段简写版
desc try8_view;
# 查看字段完整版
describe try8_view;
# 查看详细的内容
show create view try8_view;
# 查询系统表定义
select * from information_schema.views where table_name = 'try8_view';


2.3、调用存储视图

select * from try8_view;


2.4、删除存储视图

drop view if exists try8.try8_view;


2.5、修改存储视图

MySQL8 提供两种修改视图的语句,分别使用 alter view 和 create or replace view。

# 方式一:使用关键字 alter 修改存储视图
alter algorithm=merge view try8_view as
    select try8_id, try8_name from try8_tb where try8_name = 'ok'
with check option; 

# 方式二:使用关键字 create or replace view 修改存储视图
create or replace algorithm=merge view try8_view as
    select try8_id, try8_name from try8_tb where try8_name = 'ok'
with check option; 


三、MySQL8 存储视图 总结

MySQL8教程 - MySQL8 存储视图,介绍 MySQL 和 MySQL8 数据库,从 MySQL8 存储视图概念开始,逐步到 MySQL8 存储视图示例等,通篇实用易懂,让 MySQL8 入门更加快速和简单。


《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。