视图
视图
-
视图:一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存SQL逻辑,不保存查询结果
-
应用场景:多个地方用到同样的查询结果,并且该查询结果使用的SQL语句较复杂
-
下面例子中使用的数据表
-
employees 员工表
-
departments 部门表
-
jobs 工种表
-
locations 地点表
员工表分别通过部门id、工种id与部门表、工种表关联,部门表通过地点id与地点表关联。
-
1. 视图的创建
-
语法
create view 视图名 as 查询语句;
-
示例
#创建 create view ema as select last_name,department_name,j.* from employees e join departments d on e.department_id=d.department_id join jobs j on e.job_id=j.job_id #使用 select * from ema where last_name like '%a%';
-
优点
- 重用SQL语句
- 简化复杂的SQL操作,不必知道其内在的查询细节
- 保护数据,提高安全性
2. 视图的修改
-
方式一
create or replace view 视图名 as 查询语句;
-
方式二
alter view 视图名 as 查询语句;
3. 视图的查看与删除
-
查看视图
desc 视图名; #或者 show create view 视图名;
-
删除视图
drop view 视图名,视图名,...;
4. 视图的更新
-
首先创建一个视图
create or replace view myv1 as select last_name,email from employees;
-
对视图执行插入数据
insert into myv1 values('zhangsan','zhangsan@qq.com');
对视图插入数据后,原始表employees中也插入了相应的行,没有插入值的字段为null。
-
修改视图中数据
update myv1 set last_name='lisi' where last_name='zhangsan';
修改视图中数据后,原始表employees中对应的数据也被修改了。
-
删除视图中数据
delete from myv1 where last_name='lisi';
删除视图中数据后,原始表employees中对应的数据也被删除。
-
视图的可更新性和视图中查询的定义有关系,以下类型的视图不能更新:
- 包含以下关键字的SQL语句:分组函数、distinct、group by、having、union、union all
- 常量视图
- select中包含子查询
- join
- from一个不能更新的视图
- where子句的子查询引用了from子句中的表
-
视图一般是用来查询的,不会对其进行更新。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现