MySQL高级开发中视图的详细教程

MySQL高级开发中视图的详细教程

一、视图是什么?

视图(View)是一种虚拟存在的表,具有表的特性,使用时与表完全相同,但与表不同的是,它没有实际的数据存储。

其中,视图是使用SQL语句查询语句产生的结果集并进行存储的,也可以是其他视图的基础上进行定义

二、视图的类型

MySQL中视图分为以下两种:

  • 普通视图(Non-updatable Views):只能进行 SELECT 操作,不能进行 UPDATE 和 DELETE 操作

  • 可更新视图(Updatable Views):可以进行 SELECT、UPDATE 和 DELETE 操作。

三、如何创建视图?

3.1 创建普通视图

CREATE VIEW view_name AS select_statement;

其中,view_name 是视图的名称,在后续的查询中可以将其作为表名来使用。

select_statement 是查询语句,用于生成视图中的数据集。

示例:

-- 创建一个简单的普通视图,查出所有雇员的姓名和部门名称
CREATE VIEW emp_dept AS 
select e.`last_name`, d.`department_name`
from employees e join departments d on e.`department_id` = d.`department_id`;

3.2 创建可更新视图

创建可更新视图需要满足以下条件:

  1. 视图的 SELECT 语句中只使用了单表,而且没有使用聚集函数;

  2. 视图定义中不包含以下的关键字或子查询:DISTINCT、GROUP BY、HAVING、UNION、UNION ALL、SUBQUERY;

  3. 视图的 SELECT 语句中只使用了 MySQL 支持的特定函数。

在满足条件后,使用以下语法创建可更新视图:

CREATE OR REPLACE VIEW view_name AS select_statement WITH [CASCADED|LOCAL] CHECK OPTION;

其中,view_name 是视图的名称,在后续的查询中可以将其作为表名来使用。

select_statement 是查询语句,用于生成视图中的数据集。

WITH CHECK OPTION 是为了保证可更新视图的数据完整性。如果不加 WITH CHECK OPTION,则视图也能够更新与过滤条件不符的 数据值,而加了 WITH CHECK OPTION 之后,则只能更新与过滤条件相符 的数据值。

示例:

-- 基于employees表创建一个可更新视图emp_update,
-- 对其进行SELECT、INSERT、DELETE、UPDATE操作时,会影响到原表
CREATE OR REPLACE VIEW emp_update AS 
select `employee_id`, `first_name`, `last_name`, `email`,`phone_number`, `hire_date`
from employees
where department_id = 90
WITH CHECK OPTION;

--往emp_update中插入一条记录
insert into emp_update(`employee_id`, `first_name`, `last_name`, `email`,`phone_number`, `hire_date`) 
values(99999, 'Test', 'Query', null, null, '2021-01-01');

--更新emp_update中最后一条记录
update emp_update set `phone_number` = '123456789' order by `employee_id` desc limit 1;

--删除表格中employee_id=99999的这条记录
delete from emp_update where employee_id = 99999;

四、使用视图的注意事项

  • 视图可以使用JOIN查询语句进行操作;

  • 可以在视图视图上创建索引;

  • 视图的更新操作需要满足可更新视图的限制条件;

  • 视图使用完后需要及时删除,以免因更新源数据而导致的后续查询错误。

综上所述,视图是数据库中一个非常有用的工具。使用视图不仅可以避免冗余查询,还可以有效地提升查询效率,并且还能够操作虚拟表,从而更便捷地进行管理和维护数据库。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL高级开发中视图的详细教程 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Java面试通关要点汇总(备战秋招)

    Java面试通关要点汇总(备战秋招)是一篇关于Java面试备战的攻略总结,其中包含了Java面试必备知识点和技巧,可以帮助备战秋招的Java程序员更好地准备面试。该攻略分为以下几个部分: 一、Java基础知识 Java基础知识是Java面试的重中之重,包括Java语言的基本语法、常用类库、集合框架、多线程、IO操作等。针对这些知识点,面试官通常会问到一些基础…

    database 2023年5月22日
    00
  • SQL 变换带有小计的结果集

    SQL 变换(transformation)用于对结果集进行计算、排序、过滤等操作,小计(subtotal)则是在对某一列或多列进行计算后,对计算结果进行汇总,一般用于统计数据分析等场景。下面是SQL 变换带有小计的完整攻略。 1. 使用 GROUP BY 实现小计 GROUP BY 语句用于将结果集按指定列进行分组,同时可以使用聚合函数对分组后的数据进行计…

    database 2023年3月27日
    00
  • SqlServer中批量update语句

    下面是SqlServer中批量update语句的完整攻略: 什么是批量update语句 批量update语句可以一次性同时更新一个或多个表中的多行数据,该语句比单条update性能更高,可以提高数据更新的效率。 基本语法 批量update语句的基本语法如下: UPDATE {table_name} SET {column_name} = {value} [,…

    database 2023年5月21日
    00
  • SQL 创建有意义的列名

    下面是SQL创建有意义的列名的完整攻略: 一、为什么要创建有意义的列名? 在SQL命令中,列名是用于标识表中字段的信息,方便我们使用和查看数据。一个好的列名可以更好地表达字段的意思,增加代码的可读性,方便自己和其他人的理解和维护。 二、如何创建有意义的列名? 1. 遵循命名规范 命名规范是指一些行业内或编程规范中对于变量、函数、类、表名等定义的统一规则,这些…

    database 2023年3月27日
    00
  • 在同一台机器上运行多个 MySQL 服务

    要在同一台机器上运行多个 MySQL 服务,需要进行如下步骤: 1. 修改配置文件 在每个 MySQL 服务的安装目录中找到 my.cnf 或 my.ini 配置文件,并对它们进行不同的命名,以便区分。可以将它们复制并改名为 my1.cnf、my2.cnf 等。然后分别编辑这些文件,修改其中的参数,最重要的是修改 port 和 datadir 参数,以便服务…

    database 2023年5月22日
    00
  • Django缓存优化之redis

         Redis 概述   Redis 是一个开源的Inmemory key-value 存储系统,性能高,很大程度上补偿了 memcached 的不足。支持多种存储类型,包括 string, list, set, zset(sorted set — 有序集合)和 hash。   Redis 优点   1)异常快速:Redis的速度非常快,每秒能执行约…

    Redis 2023年4月13日
    00
  • MySQL和MariaDB的区别

    MySQL和MariaDB都是关系型数据库管理系统(RDBMS),它们在很多方面都很相似,但也有一些不同点。在本文中,我们将探讨MySQL和MariaDB之间的不同之处。 MySQL和MariaDB的历史 MySQL是由瑞典MySQL AB公司在1995年开始开发的。该项目于2008年被Sun Microsystems收购。2010年,Sun Microsy…

    database 2023年3月27日
    00
  • Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析

    Activiti工作流学习笔记之自动生成28张数据库表的底层原理解析 概述 Activiti 是一个轻量级的流程引擎,是 Apache下的一个顶级项目。在 Activiti 中,流程定义(Process Definition)可以通过 XML 文件或者 Java 代码的方式进行部署。在部署流程定义的时候,Activiti 会自动地创建需要的表。在本篇文章中,…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部