视图

视图

  • 视图:一种虚拟存在的表,行和列的数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的,只保存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子句中的表
  • 视图一般是用来查询的,不会对其进行更新。

posted @   木田心  阅读(77)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示