MySQL---视图(定义、修改、更新、重命名、删除)

news2024/11/27 23:31:50

1. 定义视图

视图(view)是一个虚拟表,非真实存在,其本质是根据SQL语句获取动态的数据集,并为其命

名,用户使用时只需使用视图名称即可获取结果集,并可以将其当作表来使用。

数据库中只存放了视图的定义,而并没有存放视图中的数据。这些数据存放在原来的表中。

使用视图查询数据时,数据库系统会从原来的表中取出对应的数据。因此,视图中的数据是依赖于

原来的表中的数据的。一旦表中的数据发生改变,显示在视图中的数据也会发生改变。

-- 语法;
create [or replace] [algorithm = {undefined | merge | temptable}]
view view_name [(column_list)]
as select_statement
[with [cascaded | local] check option]

repalce:替换重复视图

algorithm:可选项,表示视图选择的算法。       

        可取三个值:MERGE、TEMPTABLE或UNDEFINED。如果没有ALGORITHM子句,默认算 

        法是UNDEFINED(未定义的)。算法会影响MySQL处理视图的方式。

        对于MERGE,会将引用视图的语句的文本与视图定义合并起来,使得视图定义的某一部分取

        代语句的对应部分。

        对于TEMPTABLE,视图的结果将被置于临时表中,然后使用它执行语句。

        对于UNDEFINED,MySQL将选择所要使用的算法。如果可能,它倾向于MERGE而不是

        TEMPTABLE,这是因为MERGE通常更有效,而且如果使用了临时表,视图是不可更新的。

        明确选择TEMPTABLE的1个原因在于,创建临时表之后、并在完成语句处理之前,能够释放

        基表上的锁定。与MERGE算法相比,锁定释放的速度更快,这样,使用视图的其他客户端

        不会被屏蔽过长时间。

view_name:表示要创建的视图名称。

column_list:可选项,指定视图中各个属性的名词,默认与SELECT语句中的查询的属性相同。

select_statement:表示一个完整的查询语句,将查询记录导入视图中。

[with [cascaded | local] check option]:可选项,表示更新视图时要保证在视图权限范围之内

create or replace view view1_emp
as 
select ename,job from emp; 

-- 查看表和视图 
show full tables;

2. 修改视图:

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

3. 更新视图:

       视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟

表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据

的限制,就可能会造成数据更新失败。

某些视图是可更新的。也就是说,可以在UPDATEDELETEINSERT等语句中使用它们,以更

新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。如果

视图包含下述结构中的任何一种,那么它就是不可更新的:

       聚合函数(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;
 
update view1_emp set ename = '周瑜' where ename = '鲁肃';  -- 可以修改
insert into view1_emp values('孙权','文员');  -- 不可以插入

-- ----------视图包含聚合函数不可更新--------------
create or replace view view2_emp
as 
select count(*) cnt from emp;
 
insert into view2_emp values(100);
update view2_emp set cnt = 100; 
-- ----------视图包含distinct不可更新---------
create or replace view view3_emp
as 
select distinct job from emp;
 
insert into view3_emp values('财务');
 
-- ----------视图包含goup by 、having不可更新------------------
 
create or replace view view4_emp
as 
select deptno ,count(*) cnt from emp group by deptno having  cnt > 2;
 
insert into view4_emp values(30,100);
-- ----------------视图包含union或者union all不可更新----------------
create or replace view view5_emp
as 
select empno,ename from emp where empno <= 1005
union 
select empno,ename from emp where empno > 1005;
 
insert into view5_emp values(1015,'韦小宝');

-- -------------------视图包含子查询不可更新--------------------
create or replace view view6_emp
as 
select empno,ename,sal from emp where sal = (select max(sal) from emp);
 
insert into view6_emp values(1015,'韦小宝',30000);
-- ----------------------视图包含join不可更新-----------------
create or replace view view7_emp
as 
select dname,ename,sal from emp a join  dept b  on a.deptno = b.deptno;
 
insert into view7_emp(dname,ename,sal) values('行政部','韦小宝',30000);
 
-- --------------------视图包含常量文字值不可更新-------------------
create or replace view view8_emp
as 
select '行政部' dname,'杨过'  ename;
 
insert into view8_emp values('行政部','韦小宝');

4. 重命名视图:

-- 语法;
-- rename table 视图名 to 新视图名; 
rename table view1_emp to my_view1

5. 删除视图:

-- 语法:
-- drop view 视图名[,视图名…];
drop view if exists view_student;

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

-- 1:查询部门平均薪水最高的部门名称
select dname from dept  a ,(select deptno,avg(sal) from emp group by deptno order by avg(sal) desc limit 1) b
where a.deptno = b.deptno;  
 
-- 2:查询员工比所属领导薪资高的部门名、员工名、员工领导编号
select * from dept x,
(select a.ename aname ,a.sal asal,b.ename bname,b.sal bsal,a.deptno
from emp a, emp b 
where a.mgr = b.empno and a.sal > b.sal) y
where x.deptno = y.deptno;

-- 3:查询工资等级为4级,2000年以后入职的工作地点为北京的员工编号、姓名和工资,并查询出薪资在前三名的员工信息
create view xxx
as       
SELECT e.empno,e.ename,e.sal,e.hiredate
FROM emp e,dept d,salgrade s
WHERE (e.sal BETWEEN  losal AND hisal) AND s.GRADE = 4
AND year(e.hiredate) > '2000'
AND d.loc = '北京';
 
select * from 
(
select 
 *,
 dense_rank() over(order by sal desc ) rn
from xxx
) t
where t.rn <=3;

(日常美图时间)

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SIR模型与R模拟

SIR病毒模型R模拟 文章目录 SIR病毒模型R模拟[toc]1.SIR病毒模型2.R模拟 1.SIR病毒模型 SIR病毒模型的的三个字母分别为病毒传播过程中的三种状态&#xff0c;其中 S&#xff0c;表示易感染者&#xff0c;即没有被感染病毒的人群I&#xff0c;表示已感染者&#xff0c;即被感…

Spring_jdbcTemplate基本使用

文章目录 一、导入spring-jdbc和spring-tx坐标二、创建数据库表和实体在applicationContext.xml中配置连接池和JdbcTemplate在test数据库中创建account表 三、创建JdbcTemplate对象四、执行数据库操作 一、导入spring-jdbc和spring-tx坐标 <dependency><groupId>o…

Vue.js快速入门

文章目录 一、Vue基础1.1 渐进式框架​1.2 第一个Vue程序1.3 el 挂载点1.4 data 数据对象 二、Vue 指令2.1 v-text 文本值2.2 v-html 标签元素2.3 v-on 绑定事件2.4 v-show 隐藏2.5 v-if 消除2.6 v-bind 属性值2.7 v-for 生成列表2.8 v-model 双向数据绑定 三、axios 网络请求库…

EXCEL数组公式的理解和技巧(未完成)

1 小心特例 frenquce 会划分为n1个区间 SUMPRODUCT(IF(FREQUENCY(B5:B18,B5:B18)>0,1,0)*IF(VALUE(MID(A5:A18,6,1))5,1,0)) 2 用0/ 和1/0 数组公式来解决问题 SUMPRODUCT(1/COUNTIF(B5:B18,B5:B18)) 这个只返回了B列里不重复的数据个数&#xff0c;确实是10个 SUMPRODU…

在 Windows 上安装 kind

一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡&#xff0c;让我们一起学习在 Windows 上安装 kind。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 kind是什么 kind 是一个使用 Docker 容器“节点”运行 Kubernetes 集群的工具。使用 kind 工具搭建的 Kubernetes…

【Linux Network】应用层协议——HTTP

目录 1. 认识URL 2. urlencode和urldecode urlencode例子&#xff1a; urldecode例子&#xff1a; 3. HTTP协议格式 3.1 HTTP请求&#xff1a; 3.2 HTTP响应&#xff1a; 3.3 HTTP的方法&#xff1a; 3.4 GET方法和POST方法的区别 3.5 HTTP的状态码&#xff1a; 3.6 HTTP常见He…

Python学习20:温度转换 II(python123)

温度的刻画有两个不同体系&#xff1a;摄氏度&#xff08;Celsius&#xff09;和华氏度&#xff08;Fabrenheit&#xff09;。‪‪‪‪‪‪‫‪‪‪‪‪‪‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‫‪‪‪‪‪‪‫‪‪‪‪‪‫‪ 请编写程序将用户输入华氏度转换为摄氏度&#xff…

参会记录|春日研学 · 踏歌前行 —— MAS 实验室内部学术研讨会

前言&#xff1a;2023年5月12日&#xff08;周五&#xff09;晚&#xff0c;实验室在江苏苏州天街附近举行了一次内部研讨会&#xff0c;主题聚焦当今学术界研究前沿和实验室下一阶段发展规划。会议期间&#xff0c;首先是各位与会博士生畅所欲言&#xff0c;探讨当前学术前沿&…

数据结构学习记录——什么是图(抽象数据类型定义、常见术语、邻接矩阵表示法、邻接表表示法)

目录 什么是图 抽象数据类型定义 常见术语 无向图 有向图 网络 邻接点 度&#xff08;出度、入度&#xff09; 稀疏图 稠密图、完全图 边密度 邻接矩阵表示法 用二维数组存储 用一维数组存储 邻接矩阵的好处 邻接矩阵的坏处 邻接表表示法 指针数组-链表存储…

ES的可视化工具-Kibana的安装和使用

【前言】 Kibana 是为 Elasticsearch设计的开源分析和可视化平台。你可以使用 Kibana 来搜索&#xff0c;查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化&#xff0c;以图表的形式展现出来。 下面是Kibana的安装步骤&#xff0c;控…

Vue项目的搭建和启动

文章目录 一、安装配置 node.js1.1 下载安装1.2 配置环境变量1.3 修改模块下载位置1.4 设置淘宝镜像 二、创建启动 Vue三、开发环境 VSCode3.1 开发插件3.2 Vue 项目结构 提示&#xff1a;以下是本篇文章正文内容&#xff0c;前端系列学习将会持续更新 一、安装配置 node.js …

【重新定义matlab强大系列六】利用matlab进行一维滤波or二维滤波

&#x1f517; 运行环境&#xff1a;matlab &#x1f6a9; 撰写作者&#xff1a;左手の明天 &#x1f947; 精选专栏&#xff1a;《python》 &#x1f525; 推荐专栏&#xff1a;《算法研究》 #### 防伪水印——左手の明天 #### &#x1f497; 大家好&#x1f917;&#x1f91…

NVM —— 你把我玩明白

前期回顾 纯前端 根据目录解析word,拆分不同段落_彩色之外的博客-CSDN博客纯前端 解析 wordhttps://blog.csdn.net/m0_57904695/article/details/130503211?spm1001.2014.3001.5501 &#x1f44d; 本文专栏&#xff1a;开发技巧 目录 &#x1f37a; 下载 及 配置镜像 …

如何设计测试用例以及常用的黑盒测试方法

目录 如何设计测试用例&#xff1f; 设计测试用例的万能公式 ①功能测试 (用户的基本功能需求&#xff09; ②性能测试 ③易用性&#xff08;考虑用户体验&#xff09;测试 ④兼容性测试 ⑤界面&#xff08;UI,外观&#xff09;测试 ⑥安全测试 常用黑盒测试方法 …

MySQL_4 常见函数汇总及演示

目录 一、统计函数 1.基本语法 : 2.代码演示 : 演示Ⅰ—— 演示Ⅱ—— 二、合计函数 1.基本语法 : 2.代码演示 : 三、平均函数 1.基本语法 : 2.代码演示 : 四、最值函数 1.基本语法 : 2.代码演示 : 五、字符串函数 1.常用字符串函数 : 2.代码演示 : 六、数学…

Linux基础学习---6、系统定时任务、软件包管理、虚拟机克隆

1、系统定时任务 1.1 crontab 服务管理 1、重新启动crond服务1.2 crontab 定时任务设置 1、基本语法crontab [选项] 2、选项说明选项功能-e编辑crontab定时任务-l查询crontab任务-r删除当前用户所有的crontab任务 3、参数说明 &#xff08;1&#xff09;进入crontab编辑页面…

SpringSecurity 快速入门

1. 认证授权概述 1.1 认证授权概念 1.1.1 认证 在互联网中&#xff0c;我们每天都会使用到各种各样的APP和网站&#xff0c;在使用过程中通常还会遇到需要注册登录的情况&#xff0c;输入你的用户名和密码才能正常使用&#xff0c;也就是说成为这个应用的合法身份才可以访问…

项目开发工具【EditorConfig,Prettier,ESLint,Git Husky,Commitizen,Commitlint】

项目开发工具【六款】 前言 六款插件让你项目更加的规范✨✨✨ EditorConfig&#xff1a;为不同编辑器上处理同一项目的多个开发人员维护一致的编码风格Prettier&#xff1a;一款强大的代码格式化工具&#xff0c;是当下前端最流行的代码格式化工具ESLint&#xff1a;查找潜在…

图像增强库albumentations(v1.3.0, 2023.5)中所有图像增强方法记录(class)

整体概要 变换类型具体类模糊/噪声AdvancedBlur*&#xff0c;Blur*&#xff0c;Downscale*&#xff0c;Defocus*&#xff0c;GlassBlur*&#xff0c;GaussianBlur*&#xff0c;GaussNoise*&#xff0c;ImageCompression*&#xff0c;ISONoise*&#xff0c;MultiplicativeNoise…

MySQL基础-SQL介绍

本文介绍MySQL中SQL通用语法&#xff0c;包括&#xff1a;DDL&#xff0c;DML&#xff0c;DQL&#xff0c;DCL 文章目录 SQL分类DDL&#xff08;数据定义语言&#xff09;数据库操作表操作 DML&#xff08;数据操作语言&#xff09;添加数据更新和删除数据 DQL基础查询条件查询…