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

yizhihongxing

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日

相关文章

  • mysql8.0.20配合binlog2sql的配置和简单备份恢复的步骤详解

    mysql8.0.20配合binlog2sql的配置和简单备份恢复的步骤详解 MySQL是常用的开源关系型数据库管理系统,在使用MySQL进行数据管理的过程中,经常需要进行数据备份和恢复操作,以保障数据的安全性和稳定性。其中,binlog2sql是一种常见的MySQL备份恢复工具,可以将二进制日志文件binlog转换成SQL语句,并执行这些SQL语句,生成一…

    database 2023年5月21日
    00
  • 安装的mysql中没有my.ini文件的解决方法

    针对“安装的mysql中没有my.ini文件的解决方法”,以下是我做的一个完整攻略。 问题描述 在安装 MySQL 过程中,有人可能会遇到 MySQL 安装完成后,发现数据、日志等配置文件都没有生成的情况,甚至 my.ini 文件也遗漏了。这样一来,MySQL就无法正常运行起来,导致无法使用。 解决方法 如果你也碰到了这种情况,绝对不要慌张,这种问题可以通过…

    database 2023年5月18日
    00
  • docker5 全功能harbor仓库搭建过程

    下面是 “docker5 全功能harbor仓库搭建过程” 的完整攻略。 目录 准备工具和环境 安装docker和docker-compose 下载并安装Harbor 配置Harbor 启动并测试Harbor 示例说明 1. 准备工具和环境 在开始安装之前,我们需要准备以下工具和环境: 一台Linux服务器,推荐使用CentOS 7或Ubuntu 16.04…

    database 2023年5月22日
    00
  • mysql事务管理操作详解

    MySQL事务管理操作详解 MySQL事务是指SQL语句组成的逻辑处理单元,该单元要么全部执行成功,要么全部回滚。 事务由以下四个特性来定义:原子性、一致性、隔离性和持久性(ACID)。 原子性 原子性是指事务是最小的工作单元,它要么全部提交成功,要么全部回滚失败。在事务执行过程中,如果发生任何故障,那么整个事务将会失败,并且回滚到事务开始之前的状态。MyS…

    database 2023年5月22日
    00
  • MySQL中NULL对索引的影响深入讲解

    MySQL中的NULL对索引有着深入的影响,常常会导致查询性能下降。为了更好地理解和应对这个问题,我们有必要从以下几个方面来深入探讨: 什么是NULL? NULL是MySQL中的一个特殊值,表示该列的值未知或不可用。 具体来说,NULL有以下特点: 它不等于任何值,包括它自己。 它的数据类型在运行时才确定。 它与空字符串、0、以及FALSE等不同,这些值都表…

    database 2023年5月22日
    00
  • mysql 实现迁移数据库到另一台服务器

    为了实现数据库的迁移,我们需要完成以下步骤: 步骤一:备份原数据库 在进行任何迁移操作之前,我们需要先将原数据库备份到本地,以确保数据的安全。同时,备份也可以在迁移过程中提供一些操作重试的机会。有多种备份方式可供选择,其中最常见的包括通过工具备份和手动备份两种方式。 步骤二:在目标服务器上安装MySQL 在新服务器上安装 MySQL,并确保其版本与原服务器版…

    database 2023年5月22日
    00
  • SQL Server中使用SQL语句实现把重复行数据合并为一行并用逗号分隔

    首先,我们需要使用 SQL 语句来把重复行数据合并为一行并用逗号分隔,可以通过以下步骤来完成: 步骤一:创建测试数据表 我们需要创建测试数据表,以便后面的两个示例可以使用相同的数据进行演示。下面是创建测试表的 SQL 语句: CREATE TABLE dbo.test_data ( id INT PRIMARY KEY, name NVARCHAR(50),…

    database 2023年5月21日
    00
  • java分页拦截类实现sql自动分页

    Java分页拦截类实现SQL的自动分页主要是通过用自定义插件的方式实现,它更加灵活和便捷。下面将介绍实现步骤。 1. 配置文件 需要在mybatis-config.xml中配置插件: <!– 配置PageHelper插件 –> <plugins> <plugin interceptor="com.github.pa…

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