【MySQL视图特性】

目录:

  • 前言
  • 视图
  • 基本使用
    • 创建视图
    • 查看视图内容
    • 修改内容测试
    • 删除视图
  • 视图规则和限制

前言

剑指offer:一年又12天


视图

视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图也是带有名称的列和行内容,对视图内容的修改会影响到基表,对基表内容的修改也会影响到视图。



基本使用

创建视图

CREATE VIEW view_name AS SELECT语句;

案例:

-- 两张测试表:课程表和学生表
mysql> select * from course;
+------+--------------+-----------+
| cid  | cname        | teacher   |
+------+--------------+-----------+
|  101 | C语言        | 王老师    |
|  102 | 数据结构     | 王老师    |
|  103 | 操作系统     | 李老师    |
+------+--------------+-----------+
3 rows in set (0.00 sec)

mysql> select * from stu;
+------+-----------+------+
| sid  | sname     | cid  |
+------+-----------+------+
|    1 | 陈平安    |  101 |
|    2 | 宁姚      |  101 |
|    3 | 陈暖树    |  103 |
|    4 | 小米粒    |  103 |
|    5 | 裴钱      |  103 |
|    6 | 陈灵均    |  102 |
+------+-----------+------+
6 rows in set (0.00 sec)

-- 查看学生的选课情况
mysql> select cname, sname from stu inner join course on stu.cid = course.cid;
+--------------+-----------+
| cname        | sname     |
+--------------+-----------+
| C语言        | 陈平安    |
| C语言        | 宁姚      |
| 操作系统     | 陈暖树    |
| 操作系统     | 小米粒    |
| 操作系统     | 裴钱      |
| 数据结构     | 陈灵均    |
+--------------+-----------+
6 rows in set (0.00 sec)

-- 如果我们频繁地查看这两列信息,就可以为他们创建一个视图
mysql> create view c_s_name as select cname, sname from stu inner join course on stu.cid = course.cid;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+----------------------+
| Tables_in_enterprise |
+----------------------+
| c_s_name             | -- 在mysql看来,视图c_s_name也是一张表
| course               |
| dept                 |
| emp                  |
| exam                 |
| salgrade             |
| stu                  |
| stu1                 |
+----------------------+
8 rows in set (0.00 sec)

在Linux下的存储方式:
在这里插入图片描述


查看视图内容

-- 和表的操作一样
mysql> select * from c_s_name; 
+--------------+-----------+
| cname        | sname     |
+--------------+-----------+
| C语言        | 陈平安    |
| C语言        | 宁姚      |
| 操作系统     | 陈暖树    |
| 操作系统     | 小米粒    |
| 操作系统     | 裴钱      |
| 数据结构     | 陈灵均    |
+--------------+-----------+
6 rows in set (0.04 sec)


修改内容测试

 -- 修改视图数据
mysql> update c_s_name set sname = '崔东山' where sname = '陈灵均';
Query OK, 1 row affected (0.02 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from c_s_name;
+--------------+-----------+
| cname        | sname     |
+--------------+-----------+
| C语言        | 陈平安    |
| C语言        | 宁姚      |
| 操作系统     | 陈暖树    |
| 操作系统     | 小米粒    |
| 操作系统     | 裴钱      |
| 数据结构     | 崔东山    |  -- 视图数据改了
+--------------+-----------+
6 rows in set (0.00 sec)

mysql> select * from stu;
+------+-----------+------+
| sid  | sname     | cid  |
+------+-----------+------+
|    1 | 陈平安    |  101 |
|    2 | 宁姚      |  101 |
|    3 | 陈暖树    |  103 |
|    4 | 小米粒    |  103 |
|    5 | 裴钱      |  103 |
|    6 | 崔东山    |  102 |  -- 基表stu数据也改了
+------+-----------+------+
6 rows in set (0.00 sec)
-- 修改基表数据
mysql> update course set cname = 'Linux' where cname = '操作系统';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from course;
+------+--------------+-----------+
| cid  | cname        | teacher   |
+------+--------------+-----------+
|  101 | C语言        | 王老师    |
|  102 | 数据结构     | 王老师    |
|  103 | Linux        | 李老师    | -- 基表course数据改了
+------+--------------+-----------+
3 rows in set (0.00 sec)

mysql> select * from c_s_name;
+--------------+-----------+
| cname        | sname     |
+--------------+-----------+
| C语言        | 陈平安    |
| C语言        | 宁姚      |
| Linux        | 陈暖树    |  -- 视图数据也改了
| Linux        | 小米粒    |
| Linux        | 裴钱      |
| 数据结构     | 崔东山    |
+--------------+-----------+
6 rows in set (0.00 sec)

这个很好理解,上面我们已经看到在Linux中对于视图只保存了它的格式(.frm文件)而没有存储数据(.ibd文件),因此视图使用的仍然是基表的数据。


删除视图

DROP view view_name;
mysql> drop view c_s_name;
Query OK, 0 rows affected (0.00 sec)


视图规则和限制

  • 与表一样,必须唯一命名(不能出现同名视图或表名)
  • 创建视图数目无限制,但要考虑复杂查询创建为视图之后的性能影响
  • 视图不能添加索引,也不能有关联的触发器或者默认值
  • 视图可以提高安全性,必须具有足够的访问权限
  • order by 可以用在视图中,但是如果从该视图检索数据 select 中也含有 order by ,那么该视图中的 order by 将被覆盖
  • 视图可以和表一起使用




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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java集合/泛型篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、说说List,Set,Map三者的区别二、Array与ArrayList有什么不一样?三、Map有什么特点四、集合类存放于 Java.util 包中, 主要有几 种接口前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。…

系列四、Eureka自我保护

一、Eureka自我保护 1.1、故障现象 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。如…

学生信息管理系统winform+sqlserver

学生信息管理系统winformsqlserver Winform作为一个强大的桌面应用程序开发工具,具有丰富的图形化界面编程组件,可以快速构建出用户友好的界面。使用这个工具,我能够轻松设计出适合学生信息管理系统的各类窗体,比如学生信息录入窗…

------- 计算机网络基础

1.1概述 是什么? 答出独立计算机通信线路连接实现资源共享 计算机网络组成 从组成部分看: 硬件软件协议 从工作方式看: 边缘部分和核心部分 从功能组成看: 通信子网和资源子网 计算机网络性能指标 速率是指数据传输的物理速度,吞吐量是指实际的数据传输…

Redis:原理速成+项目实战——Redis的Java客户端

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理速成项目实战——Redis常见命令(数据结构、常见命令总结) 📚订阅专栏&…

Qt Creator可视化交互界面exe快速入门5

上一期介绍了加法计算器,本期介绍QObject定时器。 首先一样先建个工程,比如我这项目名为QObject 本期的任务就是制作图片在界面上显示,然后每秒定时切换,点击另一个暂停按钮,可以定格当前图片,即取消定时切换功能。 显示图片的我们可以使用显示里面的label 这个用于显示…

STM32+Codesys工业软件PLC解决方案

工业控制系统在现代制造和自动化领域扮演着关键角色, 基于IEC 61131-3 标准的控制器编程开发软件平台CODESYS,适用于多种行业的控制系统的开发,使用户方便快捷地对自动化工程进行编程和配置,完成项目开发、软件测试和应用调试。 本次STM32联合合作伙伴C…

设计模式(4)--对象行为(8)--状态

1. 意图 允许一个对象在其内部状态改变时改变它的行为。 2. 三种角色 上下文环境(Context)、抽象状态(State)、具体状态(Concrete State) 3. 优点 3.1 将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。 3.2 使得状态转换显式化。 3.3 State对象可被共…

超详细YOLOv8姿态检测全程概述:环境、训练、验证与预测详解

目录 yolov8导航 YOLOv8(附带各种任务详细说明链接) 搭建环境说明 不同版本模型性能对比 不同版本对比 参数解释 模型解释 训练 训练示意代码 训练数据与.yaml配置方法 .yaml配置 数据集路径 标签数据说明 训练参数说明 训练过程示意及输出…

低代码开发中业务蓝图的重要性:业务需求与系统实现的桥梁

在低代码应用开发领域,业务蓝图是一个至关重要的工具,它提供了组织业务流程需求的详细信息。它类似于一份指导开发人员进行应用开发的路线图,确保与业务的战略目标和需求保持一致。 低代码方法学,顾名思义,即减少了传…

基于AM62x的ARM+FPGA+Codesys低成本软PLC解决方案

GPMC并口简介 GPMC(General Purpose Memory Controller)是TI处理器特有的通用存储器控制器接口,支持8/16bit数据位宽,支持128MB访问空间,最高时钟速率133MHz。GPMC是AM62x、AM64x、AM437x、AM335x、AM57x等处理器专用于与外部存储器设备的接口…

交叉验证的种类和原理(sklearn.model_selection import *)

交叉验证的种类和原理 所有的来自https://scikit-learn.org/stable/modules/cross_validation.html#cross-validation-iterators并掺杂了自己的理解。 文章目录 前言一、基础知识1.1 交叉验证图形表示1.2 交叉验证主要类别 二、部分交叉验证函数(每类一个&#xff0…

SQL注入【ByPass有点难的靶场实战】(九)

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 0、总体思路 先确认是否可以SQL注入,使用单…

Unity坦克大战开发全流程——开始场景——设置界面

开始场景——设置界面 step1:设置面板的背景图 照着这个来设置就行了 step2:写代码 关联的按钮控件 监听事件函数 注意:要在start函数中再写一行HideMe函数,以便该面板能在一开始就能隐藏自己。 再在BeginPanel脚本中调用该函数即…

ESP32入门六(读取引脚的模拟信号[2]:信号出现误差的原因)

在之前的章节中,我们测试了用ESP32来接收模拟电压信号,在测试中,读取到的数据与现实存在一定的误差,在这一篇中,我们尝试了解出现误差的原因和解决方法。 对于出现的误差,有多种软件和硬件方面的原因: 一、…

红黑树的删除

导航链接 红黑树的性质     红黑树的旋转、变色     红黑树的插入     红黑树的删除 文章目录 导航链接二叉搜索树如何删除结点?场景一:删除没有孩子的结点场景二:删除有一个孩子的结点场景三:删除有两个孩子的结点 红…

海康visionmaster-分支字符:控制调试模式开关的方

在图的右边分支字符模块有两个分支,通过 C#代码 GetParamValue 函数可以看到调试模 式的相关参数 ModuleInfoList 的值为:4#1#0KaTeX parse error: Expected EOF, got # at position 3: 10#̲0#0。其中分支 4#1#0$的 4 表示模 块 id,1 表示这…

操作系统:可变分区管理

有作业序列:作业A要求42K;作业B要求27K,作业C要求22K,作业和空闲内存区如下图所示,请画出最佳适应算法空闲队列图,并分析最佳适应算法是否适合该作业系列。 答:最佳适应算法是按照空闲块由小到大…

Harmony全局应用生命周期 EntryAbility.ts 讲解

之前 我们说过 page页面的生命周期 组件的生命周期 其实他和uni一样有一个整个应用的生命周期 我们如下图打开EntryAbility.ts 这是我们整个程序app的状态控制 他这里也有几个全局的生命周期 比如 我们手机 点开当前 App 启动 app 会触发 它的 onCreate 生命周期 当我们从手…

前端 js 基础(2)

js For In for in 循环遍历 person 对象每次迭代返回一个键 (x)键用于访问键的值键的值为 person[x] 如果索引顺序很重要,请不要在数组上使用 for in。 索引顺序依赖于实现,可能不会按照您期望的顺序访问数组值。 当顺序很重要时,最好使用 f…
最新文章