【数据库原理及应用】创建与使用视图

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 创建与使用视图示例

     视图是一个从或多个表中导出来的表,它是一种虚拟存在的表,并且表的结构和数据都依赖于基本表,通过视图不仅可以看到存放在基本表中的数据,还可以像操作基本表一样,对视图中存放的数据进行查询、修改和删除。

视图具有以下优点:1、简单化 2、安全性 3、逻辑数据独立性

【任务5.1】使用语句创建视图

1.创建视图

       视图中包含了SELECT查询的结果,因此视图的创建基于SELECT语句和已存在的数据表。视图可以建立在一张表上,也可以建立在多张表上。在MySQL中,创建视图使用CREATE VIEW语句,其基本语法格式为:

CREATE [OR REPLACE][ALGORITHM={UNDEFINED| MERGE

TEMPTABLE} ]

VIEW view_name [ (column_list) ]AS select_statement[WITH [CASCADED|LOCAL]CHECK OPTION]

在上述语法格式中,每个部分的含义如下。

CREATE:表示创建视图的关键字,上述语句能创建新的视图。

OR REPLACE:如果给定了此子句,表示该语句可以替换已有视图。

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

UNDEFINED:表示MySQL将自动选择所要使用的算法。

MERGE:表示将使用视图的语句与视图定义合并起来,使得视图定义的某一部分取代语句的对应部分。

TEMPTABLE:表示将视图的结果存入临时表,然后使用临时表执行语句。

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

column_list:可选项,表示字段名清单。指定了视图中各个字段名,默认情况下,与SELECT 语句中查询的字段名相同。

AS:表示指定视图要执行的操作。

select_statement:一个完整的查询语句,表示从某个表或视图中查出某些满足条件的记录,将这些记录导入视图中。

WITH CHECK OPTION:可选项,表示创建视图时要保证在该视图的权限范围之内。

CASCADED:可选项,表示创建视图时,需要满足与该视图有关的所有相关视图和表的条件,该参数为默认值。

LOCAL:可选项,表示创建视图时,只要满足该视图本身定义的条件即可。该语句要求具有针对视图的CREATE VIEW 权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。

如果还有OR REPLACE子句,必须在视图上具有DROP权限。视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为db_name.view_name。

2.视图的规则和限制

创建视图前,应该知道它的一些限制。视图创建和使用最常见的规则和限制如下。

①与表一样,视图必须唯一命名(不能给视图取与别的视图或表相同的名称)。

②对于可以创建的视图数目没有限制。

③为了创建视图,必须具有足够的访问权限。这些限制通常由数据库管理人员授予。

④视图可以嵌套,即可以利用从其他视图中检索数据的查询来构造一个视图。

⑤ORDER BY可以用在视图中,但如果在该视图检索数据 SELECT中也含有ORDER BY,那么该视图中的ORDER BY将被覆盖。

⑥视图不能索引,也不能有关联的触发器或默认值。

⑦视图可以和表一起使用。例如,编写一条连接表和视图的SELECT语句。

【任务5.2】修改视图

       修改视图是指修改数据库中存在的视图,例如,当基本表的某些字段发生变化时,可以通过修改视图的方式来保持视图与基本表的一致性。在MySQL中,可以通过CREATE OR REPLACE VIEW 语句和ALTER 语句来修改视图。

1.使用 CREATE OR REPLACE VIEW 语句修改视图

在MySQL中,使用CREATE OR REPLACE VIEW语句修改视图,其语法格式为:

CREATE [OR REPLACE] [ALGORITHM={UNDEFINEDTEMPTABLE} ]

VIEW view_name [ (column_list) ]

AS select_statement

[WITH [CASCADED|LOCAL] CHECK OPTION]

可以看到,修改视图的语句和创建视图的语句是完全一样的。如果视图已经存在,那么使用修改语句对视图进行修改;如果视图不存在,那么将创建一个新视图。

2.使用ALTER 语句修改视图

ALTER语句是MySQL提供的另外一种修改视图的方法,其修改视图的语法格式为:

ALTER [ALGORITHM= {UNDEFINED|MERGE|TEMPTABLE} ]

VIEW view_name [ (column_list) ]

AS SELECT_statement

[WITH [CASCADED|LOCAL]CHECK OPTION]

这个语法中的关键字与前面创建视图的关键字是一样的,这里不再介绍。

【任务5.3】利用视图更新数据表

更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。当通过视图更新数据时,其实是在更新基本表中的数据,如果对视图增加或删除记录,实际上是对其基本表增加或删除记录。视图更新主要有3种方法:UPDATE、INSERT和DELETE。

1.使用UPDATE 语句更新视图

在MySQL中,可以使用UPDATE语句对视图中原有的数据进行更新。

2.使用INSERT 语句更新视图

在MySQL中,可以使用INSERT语句对视图中的基本表插入一条记录。

3.使用DELETE 语句更新视图

在MySQL中,可以使用DELETE语句对视图中的基本表删除部分记录。

需要注意的是,尽管更新视图有多种方式,但并非所有情况下都能执行视图的更新操作。当视图中包含如下内容时,视图的更新操作将不能被执行。

(1)视图中不包含基本表中被定义为非空的列。

(2)在定义视图的SELECT语句后的字段列表中使用了数学表达式。

(3)在定义视图的SELECT语句后的字段列表中使用了聚合函数。

(4)在定义视图的SELECT 语句中使用了 DISTINCT、UNION、LIMIT、GROUP BY或 HAVING子句。

【任务5.4】删除视图

当视图不再需要时,可以将其删除,删除视图时,只会删除视图的定义,不会删除数据。删除一个或多个视图可以使用DROP VIEW语句,其基本语法格式为:

DROP VIEW [IF EXISTS]

view_name [,view_name]···

{RESTRICT | CASCADE}

其中,“view_name”是要删除的视图名称,可以添加多个需要删除的视图名称,各个名称之间使用逗号分隔开。删除视图必须拥有DROP权限。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
人工智能 容灾 关系型数据库
【AI应用启航workshop】构建高可用数据库、拥抱AI智能问数
12月25日(周三)14:00-16:30参与线上闭门会,阿里云诚邀您一同开启AI应用实践之旅!
|
2月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
2月前
|
存储 缓存 网络安全
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
南大通用GBase 8s 数据库 RHAC集群基本原理和搭建步骤
|
2月前
|
缓存 NoSQL 数据库
运用云数据库 Tair 构建缓存为应用提速,完成任务得苹果音响、充电套装等好礼!
本活动将带大家了解云数据库 Tair(兼容 Redis),通过体验构建缓存以提速应用,完成任务,即可领取罗马仕安卓充电套装,限量1000个,先到先得。邀请好友共同参与活动,还可赢取苹果 HomePod mini、小米蓝牙耳机等精美好礼!
|
2月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
61 3
|
2月前
|
存储 Java 关系型数据库
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践
在Java开发中,数据库连接是应用与数据交互的关键环节。本文通过案例分析,深入探讨Java连接池的原理与最佳实践,包括连接创建、分配、复用和释放等操作,并通过电商应用实例展示了如何选择合适的连接池库(如HikariCP)和配置参数,实现高效、稳定的数据库连接管理。
72 2
|
3月前
|
XML 存储 数据库
XML在数据库中有哪些应用?
【10月更文挑战第17天】XML在数据库中有哪些应用?
62 2
|
11天前
|
存储 Oracle 关系型数据库
数据库传奇:MySQL创世之父的两千金My、Maria
《数据库传奇:MySQL创世之父的两千金My、Maria》介绍了MySQL的发展历程及其分支MariaDB。MySQL由Michael Widenius等人于1994年创建,现归Oracle所有,广泛应用于阿里巴巴、腾讯等企业。2009年,Widenius因担心Oracle收购影响MySQL的开源性,创建了MariaDB,提供额外功能和改进。维基百科、Google等已逐步替换为MariaDB,以确保更好的性能和社区支持。掌握MariaDB作为备用方案,对未来发展至关重要。
39 3
|
11天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
41 3
|
11天前
|
SQL 关系型数据库 MySQL
数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog
《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》介绍了如何利用MySQL的二进制日志(Binlog)恢复误删除的数据。主要内容包括: 1. **启用二进制日志**:在`my.cnf`中配置`log-bin`并重启MySQL服务。 2. **查看二进制日志文件**:使用`SHOW VARIABLES LIKE 'log_%';`和`SHOW MASTER STATUS;`命令获取当前日志文件及位置。 3. **创建数据备份**:确保在恢复前已有备份,以防意外。 4. **导出二进制日志为SQL语句**:使用`mysqlbinlog`
54 2