MySQL视图的概念和操作函数有哪些

常见的数据库对象

对象 描述

表(TABLE)表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记录数据字典就是系统表,存放数据库相关信息的表。系统表的数据通常由数据库系统维护, 程序员通常不应该修改,只可查看约束 (CONSTRAINT)执行数据校验的规则,用于保证数据完整性的规则视图(VIEW)一个或者多个数据表里的数据的逻辑显示,视图并不存储数据索引(INDEX)用于提高查询性能,相当于书的目录存储过程 (PROCEDURE)用于完成一次完整的业务处理,没有返回值,但可通过传出参数将多个值传给调 用环境存储函数 (FUNCTION)用于完成一次特定的计算,具有一个返回值触发器 (TRIGGER)相当于一个事件监听器,当数据库发生特定事件后,触发器被触发,完成相应的处理

视图的概念

视图是一种 虚拟表 ,本身是 不具有数据 的,占用很少的内存空间,它是 sql 中的一个重要概念。

视图建立在已有表的基础上, 视图赖以建立的这些表称为基表。

视图的创建和删除只影响视图本身,不影响对应的基表。当在视图上执行增加、删除、修改(DML)操作时,视图中的数据会相应地更新,反之亦然,数据表中的数据也会发生变化。

视图提供数据内容的语句为 SELECT 语句, 可以将视图理解为存储起来的 SELECT 语句

在数据库中,视图不会保存数据,数据真正保存在数据表中。如果对数据表中的数据进行增加、删除或修改操作,视图中的数据也会相应地发生变化。反之亦然。

视图,是向用户提供基表数据的另一种表现形式。通常情况下,小型项目的数据库可以不使用视 图,但是在大型项目中,以及数据表比较复杂的情况下,视图的价值就凸显出来了,它可以帮助我 们把经常查询的结果集放到虚拟表中,提升使用效率。理解和使用起来都非常方便。

创建视图

查询语句中字段的别名会作为视图的别名出现

CREATE VIEW vu_empsAS SELECT employee_id,last_name,salaryFROM emps;
CREATE VIEW vu_emps2(emp_id,name,monthly_sal)AS SELECT employee_id,last_name,salaryFROM emps;

针对多表的视图创建

CREATE VIEW vu_emp_deptASSELECT employee_id,e.department_id,department_nameFROM emps e JOIN depts dON e.department_id = d.department_id;SELECT * FROM vu_emp_dept;

利用视图对数据进行格式化

CREATE VIEW vu_emp_dept1ASSELECT CONCAT(e.last_name,'(',d.department_name,')') emp_infoFROM emps e JOIN depts dON e.department_id = d.department_id;

基于视图创建视图

CREATE VIEW vu_emp4AS SELECT department_id,department_name FROM vu_emp_dept;SELECT * FROM vu_emp4;

查看视图

查看数据库的表对象,视图对象

SHOW TABLES;

查看数据库结构

DESC vu_emp4;

查看数据的属性信息

mysql> SHOW TABLE STATUS LIKE 'vu_emp4'G;*************************** 1. row ***************************           Name: vu_emp4         Engine: NULL        Version: NULL     Row_format: NULL           Rows: NULL Avg_row_length: NULL    Data_length: NULLMax_data_length: NULL   Index_length: NULL      Data_free: NULL Auto_increment: NULL    Create_time: NULL    Update_time: NULL     Check_time: NULL      Collation: NULL       Checksum: NULL Create_options: NULL        Comment: VIEW1 row in set (0.00 sec)ERROR: No query specified

查看视图的详细定义信息

mysql> SHOW CREATE VIEW vu_emp4G;*************************** 1. row ***************************                View: vu_emp4         Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `vu_emp4` AS select `vu_emp_dept`.`department_id` AS `department_id`,`vu_emp_dept`.`department_name` AS `department_name` from `vu_emp_dept`character_set_client: utf8collation_connection: utf8_general_ci1 row in set (0.00 sec)ERROR: No query specified

更新视图数据

更新视图中的数据,会导致基表中数据的修改

更新表中的数据,也会导致视图中的数据的修改

为了使视图是可更新的,视图中的每一行必须对应于基本表中的一行并且两者之间存在一对一的关系。另外当视图定义出现如下情况时,视图不支持更新操作:

在定义视图的时候指定了“ALGORITHM = TEMPTABLE”,视图将不支持INSERT和DELETE操作;

视图中不包含基表中所有被定义为非空又未指定默认值的列,视图将不支持INSERT操作;

在定义视图的SELECT语句中使用了 JOIN联合查询 ,视图将不支持INSERT和DELETE操作;

即构数智人 即构数智人

即构数智人是由即构科技推出的AI虚拟数字人视频创作平台,支持数字人形象定制、短视频创作、数字人直播等。

即构数智人 36 查看详情 即构数智人

在定义视图的SELECT语句后的字段列表中使用了 数学表达式 或 子查询 ,视图将不支持INSERT,也 不支持UPDATE使用了数学表达式、子查询的字段值;

在定义视图的SELECT语句后的字段列表中使用 DISTINCT 、 聚合函数 、 GROUP BY 、 HAVING 、 UNION 等,视图将不支持INSERT、UPDATE、DELETE;

在定义视图的SELECT语句中包含了子查询,而子查询中引用了FROM后面的表,视图将不支持 INSERT、UPDATE、DELETE;

视图定义基于一个 不可更新视图 ; 常量视图。

虽然视图可以进行数据更新,但总体而言,视图作为虚拟表主要用于方便查询,不建议进行视图数据的更新。对视图数据的更改,都是通过对实际数据表里数据的操作来完成的。

修改视图

方式1:使用CREATE OR REPLACE VIEW 子句修改视图

CREATE OR REPLACE VIEW empvu80(id_number, name, sal, department_id)ASSELECT employee_id, first_name || ' ' || last_name, salary, department_idFROM employeesWHERE department_id = 80;
CREATE OR REPLACE VIEW vu_emp4AS SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_infoFROM emps e JOIN depts dON e.department_id = d.department_id;

说明:CREATE VIEW 子句中各列的别名应和子查询中各列相对应。

方式2:ALTER VIEW

修改视图的语法是:

ALTER VIEW 视图名称AS查询语句

ALTER VIEW vu_emp4AS SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_infoFROM emps e JOIN depts dON e.department_id = d.department_id;

删除视图

DROP VIEW vu_emp4;DROP VIEW IF EXISTS vu_emp1;

视图的优缺点

优点:

操作简单

减少数据冗余

数据安全

适应灵活多变的需求

能够分解复杂的查询逻辑

缺点:

维护成本高

可读性不好

以上就是MySQL视图的概念和操作函数有哪些的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/269646.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
《女神异闻录》系列Steam促销活动开跑 全场低至3折
上一篇 2026年10月14日 02:10:43
汽车故障问题免费咨询平台?
下一篇 2025年12月1日 20:34:40

相关推荐

  • MySQL“=”运算符查询结果为何出现模糊匹配?

    MySQL“=”运算符查询结果为何出现模糊匹配?MySQL“=”运算符查询结果为何出现模糊匹配?MySQL“=”运算符查询结果为何出现模糊匹配?MySQL“=”运算符查询结果为何出现模糊匹配?

    MySQL “=” 运算符查询结果出现疑似模糊匹配的现象分析 在MySQL数据库中,我们通常认为“=”运算符执行精确匹配。然而,实际操作中,有时会出现看似模糊匹配的结果,本文将针对此类问题进行分析。 问题描述: 用户使用“=”运算符在 a_temp_sw 表的 id 字段和 ods_raw_orde…

    2026年10月14日 • 用户投稿
    000
  • MySQL浮点型数据类型怎么用

      mysql 浮点型数据类型   浮点型声明:float(M,D) double(M,D)  Decimal(M,D) M:总位数 D:小数位数  mysql>Create table stu(  num1 float(5,2),  num2 double(6,1)  )   MySQL支持…

    2026年10月14日
    000
  • Swoole的协程和Go的协程有什么不同

    Swoole的协程和Go的协程有什么不同Swoole的协程和Go的协程有什么不同Swoole的协程和Go的协程有什么不同Swoole的协程和Go的协程有什么不同

    Swoole协程基于PHP扩展实现,需手动拦截IO并依赖协作式调度;Go协程由运行时管理,支持抢占式调度,语言原生集成并发机制,资源开销更小且生态更完善。 Swoole的协程和Go的协程虽然都用于实现高并发异步编程,但它们在设计哲学、运行时机制和使用方式上有本质区别。理解这些差异有助于根据技术栈和场…

    2026年10月14日 • 用户投稿
    600
  • mysql报错RSA private key file not found怎么解决

    挖错网 一款支持文本、图片、视频纠错和AIGC检测的内容审核校对平台。 28 查看详情 安装mysql报错 [Note] RSA private key file not found: /db/mysql5.6/data//private_key.pem. Some authentication p…

    2026年10月14日
    100
  • 告别手写SQL的烦恼:如何使用PixieQueryBuilder提升PHP数据库操作效率

    可以通过一下地址学习composer:学习地址 大家好!作为一名php开发者,我们或多或少都经历过与数据库打交道的“甜蜜负担”。无论是简单的增删改查,还是复杂的联表查询,手写sql语句总是绕不开的话题。然而,这种直接操作数据库的方式,虽然灵活,却也埋下了不少隐患: 安全风险: 最常见的就是SQL注入…

    2026年10月14日
    400
  • mysql数据库中Decimal类型怎么使用

    mysql数据库中Decimal类型怎么使用mysql数据库中Decimal类型怎么使用mysql数据库中Decimal类型怎么使用mysql数据库中Decimal类型怎么使用

    1 背景 数字运算在数据库中是很常见的需求, 例如计算数量、重量、价格等, 为了满足各种需求, 数据库系统通常支持精准的数字类型和近似的数字类型. 精准的数字类型包含 int, decimal 等, 这些类型在计算过程中小数点位置是固定的, 其结果和行为比较可预测. 当涉及钱时, 这个问题尤其重要,…

    2026年10月13日 • 用户投稿
    000
  • 线上PHP+MySQL开发培训课程的优势与不足

    线上php+mysql开发培训课程的优势包括灵活性、资源丰富性和成本效益,劣势包括互动性不足、自律性挑战和技术依赖性。1. 灵活性:可随时随地学习,适合有工作或其他责任的人。2. 资源丰富性:提供多样化的视频教程、文档和练习题。3. 成本效益:价格较低且可反复观看课程。4. 互动性不足:缺乏即时反馈…

    2026年10月13日
    000
  • MySQL中如何使用MD5加密

    MySQL中如何使用MD5加密MySQL中如何使用MD5加密MySQL中如何使用MD5加密MySQL中如何使用MD5加密

    什么是MD5? md5信息摘要算法(英语:md5 message-digest agorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。md5由美国密码学家罗纳德·李维斯特(ronald linnrivest))…

    2026年10月13日 • 用户投稿
    100
  • mysql数据库怎么导入导出

    1.数据库导入 mysql -uroot -p123456 –default-character-set=utf8 test123 2.数据库导出 导出整个数据库 mysqldump -uroot -p123456 test123> test123.sql 导出数据库单表 mysqldump…

    2026年10月13日
    000
  • Mysql中current_time/current_date()与now()区别是什么

    current_date()只显示的是当前时间的日期 例如:select current_date() from a ;结果:2021-08-25 current_time()只显示当前时间的时分秒 例如:select CURRENT_TIME() from a ;14:07:06 now()显示全…

    2026年10月13日
    000
  • 如何解决PHP异步操作的复杂性与效率问题,使用GuzzleHttpPromise让你的代码更优雅高效

    可以通过一下地址学习composer:学习地址 异步之痛:PHP开发者的心结 想象一下这样的场景:你正在开发一个需要从多个第三方服务获取数据的php应用。比如,你需要同时查询用户在不同平台上的积分、拉取多个商品的库存信息,或者向多个微服务发送请求。在传统的php开发模式中,这些操作通常是同步阻塞的:…

    2026年10月13日
    800
  • Swoole怎么解决多个Worker进程的数据共享问题

    Swoole怎么解决多个Worker进程的数据共享问题Swoole怎么解决多个Worker进程的数据共享问题Swoole怎么解决多个Worker进程的数据共享问题Swoole怎么解决多个Worker进程的数据共享问题

    答案是使用外部机制实现数据共享。Swoole多进程间内存不共享,需通过Redis/Memcached、Swoole Table、消息队列或数据库等方案实现数据共享,其中Redis适用于缓存和会话存储,Table适合高速轻量级共享,消息队列用于解耦复杂业务,数据库或文件适用于低频持久化场景,选择依据为…

    2026年10月13日 • 用户投稿
    200
  • Mysql索引的最左前缀原则是什么

    Mysql索引的最左前缀原则是什么Mysql索引的最左前缀原则是什么Mysql索引的最左前缀原则是什么Mysql索引的最左前缀原则是什么

    前言 之所以有这个最左前缀索引 归根结底是mysql的数据库结构 B+树 在实际问题中 比如 索引index (a,b,c)有三个字段, 使用查询语句select * from table where c = ‘1’ ,sql语句不会走index索引的 select * from table whe…

    2026年10月13日 • 用户投稿
    100
  • 如何在mysql中使用存储引擎优化索引效率

    选择合适的存储引擎是提升MySQL性能的关键。Inn%ignore_a_1%DB支持事务和行级锁,适合高并发读写场景,其聚集索引结构有利于范围查询;MyISAM适用于以读为主、需全文检索的场景,但不支持事务。应优先选用InnoDB,并配合自增主键、联合索引最左前缀原则优化索引设计,避免冗余索引。通过…

    2026年10月13日
    200
  • Mysql数据库如何手动及定时备份

    Mysql数据库如何手动及定时备份Mysql数据库如何手动及定时备份Mysql数据库如何手动及定时备份Mysql数据库如何手动及定时备份

    手动备份 1)cmd控制台:mysqldump -uroot -proot 数据库名 [表名1,表名2…] > 文件路径 比如:把 demo 数据库备份到 e:testdemo.bak 下 mysqldump -uroot -p123456 demo > E:testdemo…

    2026年10月13日 • 用户投稿
    100
  • MySQL触发器如何创建与删除

    MySQL触发器如何创建与删除MySQL触发器如何创建与删除MySQL触发器如何创建与删除MySQL触发器如何创建与删除

    1.为什么需要触发器 有一些表是互相关联的,比如说商品表和库存表,我们对商品表的数据进行操作,那么对应的库存表还得发生变化,这样才可以保证数据的完整。如果我们是自己手动维护的话,比较麻烦。这个时候我们可以使用触发器,创建一个触发器,让商品信息数据的插入操作自动触发库存数据的插入操作等,这样我们就不需…

    2026年10月13日 • 用户投稿
    100
  • Swoole如何让PHP脚本常驻内存

    Swoole如何让PHP脚本常驻内存Swoole如何让PHP脚本常驻内存Swoole如何让PHP脚本常驻内存Swoole如何让PHP脚本常驻内存

    Swoole通过将PHP转为常驻内存的守护进程,实现一次加载、多次执行。1. 使用Swoole Server启动HTTP服务,进程持续运行,避免重复解析脚本;2. 利用静态变量和全局对象缓存数据库连接、配置等,提升性能;3. 配置worker_num、daemonize及reload机制,保障服务稳…

    2026年10月13日 • 用户投稿
    100
  • SQL语句中的AND运算符和OR运算符怎么用

    sql %ignore_a_1% & or 运算符and 和 or 运算符用于基于一个以上的条件对记录进行过滤。and 和 or 可在 where 子语句中把两个或多个条件结合起来。    如果第一个条件和第二个条件都成立,则 and 运算符显示一条记录。    如果第一个条件和第二个条件中…

    2026年10月13日
    100
  • mysql5.7.25全文检索功能怎么使用

    前言 有时项目中需要用到全文检索功能,如果全文检索数量相对较小,并且不希望单独搭建elasticsearch这样的专用索引工具,就可以考虑使用mysql自带的全文检索功能。 mysql 5.7.25自带的全文检索功能,有一定的方便性。 在MySQL 5.7.6之前,全文索引只支持英文全文索引,不支持…

    2026年10月13日
    200
  • MySQL表文件的示例分析

      mysql表文件介绍   一个数据库对应一个文件夹   一个表对应一个或者多个文件   引擎myisam,一个表对应三个文件   .frm存储的是表结构  .myd存储的是表数据  .myi 存储的是表数据的索引   引擎innodb,一个表对应一个表结构文件,innodb的所有表数据保存一起,…

    2026年10月13日
    100

发表回复

登录后才能评论
关注微信