MySQL-----视图

一   视图

▶ 介绍

        视图view是一个虚拟表,非真实存在,其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用视图名称即可获取结果集,并可以将其当作表来使用。
        数据库中存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。
        使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

▶ 作用

        简化代码,可以把重复使用的查询封装成视图重复使用,同时可以使复杂的查询易于理
和使用。
        安全原因,如果一张表中有很多数据,很多信息不希望让所有人看到,此时可以使用视图视,如:社会保险基金表,可以用视图只显示姓名,地址,而不显示社会保险号和工资数等,可以对不同的用户,设定不同的视图。

二   创建视图

语法:

create [or replace] [algorithm = {undefine | merge | temptable }]
 view 视图名 [(视图字段列表)]
 as 查询语句
 [with [cascad | local ] check option]

参数说明:
  algorithm:可选项,表示视图选择的算法
  [with [cascad | local ] check option]:可选项,表示更新视图时要保证在该视图的权限范围之内

数据准备

我们先创建三张表:

创建视图

        需要注意的是,如果原表的数据发生改变,那么视图里面显示的数据会随着原表的改变而改变。

三   修改视图

        修改视图是指修改数据库中已存在的表的定义。当基本表的某些字段发生改变时,可以通过修改视图来保持视图和基本表之间一致。MySQL中通过CREATE OR REPLACE  VIEW语句和ALTER VIEW语句来修改视图。

▶ 格式

   alter view 视图名 as select语句

▶ 演示

-- 修改视图
alter view 视图名 as select语句alter view view1_emp
as 
select a.deptno,a.dname,a.loc,b.ename,b.sai from dept a,emp b where a.deptno=b.deptno;select * from view1_emp;

四   更新视图

        某些视图是可更新的。也就是说,可以在UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。
如果视图包含下述结构中的任何一种,那么它就是不可更新的:
        聚合函数(SUM(),MIN(),MAX(),COUNT()等). 
        DISTINCT
        GROUP BY
        HAVING
        UNION或UNION ALL
        位于选择列表中的子查询
        JOIN
        FROM子句中的不可更新视图
        WHERE子句中的子查询,引用FROM子句中的表。
        仅引用文字值(在该情况下,没有要更新的基本表)

        视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。

执行更新过程:

create or replace view view1_emp
as 
select ename,job from emp;select * from view1_emp;update view1_emp set ename = '周瑜' where  ename = '张飞';

更新视图前的表

更新视图后的表

        这说明更新视图的数据,实际上就是对原表的数据进行更新。

五   重命名视图和删除视图

 ▶ 重命名视图

rename table 视图名 to 新视图名;

 ▶ 删除视图

drop view if exists 视图名[,视图名...];

删除视图时,只能删除视图的定义,不会删除数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/522026.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

修复 因 fstab 中UUID 错误导致系统无法正常工作的问题

操作系统: PVE 8.0 /debian 12 (bookworm) 问题症状:可以正常启动进入系统,但是系统盘以只读方式挂载 问题原因:/etc/fstab 中引导区的UUID 被错误修改导致 解决方法: 重启系统,在…

CPU设计实战-加载和存储指令(2)

目录 一 ll和sc指令说明 二 ll和sc指令的实现 1 llbit寄存器 2 译码阶段 3 访存阶段 4 Load相关问题 5 流水线在取指阶段暂停 本章介绍两个比较特殊的加载存储指令ll和sc,这两个指令的存在用于实现信号量机制。 信号量机制:在多线程中为了保证某个…

项目的搭建与配置

vue create calendar_pro 选择如下配置选项 安装 vue3 支持 vue add vue-next package.json 关闭 eslint 检测。 vue.config.js 配置跨域同源策略。 const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…

MyBatis-Plus如何娴熟运用乐观锁

欢迎来到我的博客,代码的世界里,每一行都是一个故事 MyBatis-Plus如何娴熟运用乐观锁 前言乐观锁的基本概念基本概念和原理:为何乐观锁是解决并发问题的有效手段: MyBatis-Plus中乐观锁的支持1. Version 注解:2. 配置乐…

深入浅出Redis(八):Redis的集群模式

引言 Redis是一款优秀的键值对、内存非关系型数据库,单机节点下的Redis存在无法保证高可用、容量不足等问题 上篇文章介绍的哨兵主要能够保证主从架构下Redis的可用性,但是仍然存在容量不足、推举新的主节点时不能访问Redis的问题,集群可水…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件,没有严格的项目结构目录,但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少:name、version、mainfest_version; // 清单文件的版本,这个必须写…

jmap-各种option参数说明

基本情况 jmap(JVM Memory Map):作用一方面是获取dump文件(堆转储快照文件,二进制文件),它还可以获取目标Java进程的内存相关信息,包括Java堆各区域的使用情况、堆中对象的统计信息…

sheng的学习笔记-AI-多分类学习:ECOC,softmax

目录:sheng的学习笔记-AI目录-CSDN博客 基本术语: 若我们欲预测的是离散值,例如“好瓜”“坏瓜”,此类学习任务称为“分类”(classification); 若欲预测的是连续值,例如西瓜成熟度0.95、0.37,…

蓝桥杯:矩形总面积(Java)

目录 问题描述输入格式输出格式代码实现 问题描述 平面上有个两个矩形R1和R2,它们各边都与坐标轴平行。设(x1, y1)和(x2 ,y2)依次是R1的左下角和右上角坐标,(x3, y3)和(x4, y4)依次是R2的左下角和右上角坐标,请你计算R1和R2的总面积是多少? …

Jmeter(GUI模式)详细教程

前些天,领导让我做接口的压力测试。What??我从未接触过这方面,什么都不知道,一脸蒙。于是我从学习jmeter开始入手。 现在记录下来jmeter的使用步骤,希望能对大家有所帮助。 一、安装Jmeter 1、电脑安装J…

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数

1910_野火FreeRTOS教程阅读笔记_prvStartFirstTask函数 全部学习汇总: g_FreeRTOS: FreeRTOS学习笔记 这是教程中的一个函数,通过汇编来实现的。注释部分以及结合后面的讲解部分,可能还是有一点点细节的地方让初学者疑惑。我结合我自己的理解…

SAP金江、阎韶华、雷凡将出席“第四届ISIG-RPA、低代码、流程挖掘三大峰会

3月16日,第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导,企智未来科技(RPA中国、AIGC开放社区、LowCode低码时代)主办。大会旨在聚合每一位产业成员的力量,深入探索R…