.创建视图
        视图中包含了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语句。

修改视图
        修改视图是指修改数据库中存在的视图,例如,当基本表的某些字段发生变化时,可以通过修改视图的方式来保持视图与基本表的一致性。在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]

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

利用视图更新数据表
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。当通过视图更新数据时,其实是在更新基本表中的数据,如果对视图增加或删除记录,实际上是对其基本表增加或删除记录。视图更新主要有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子句。

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

DROP VIEW [IF EXISTS]

view_name [,view_name]···

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

项目五总结 创建与使用视图相关推荐

  1. 项目五总结:创建视图

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

  2. 第五章总结(创建与使用视图)

    视图是一种虚拟存在的表,表的结构和数据都依赖于基本表,通过视图不仅可以看到存放在基本表中的数据,还可以像操作基本表一样,对视图中存放的数据进行查询.修改和删除. 视图具有以下优点:1.简单化 2.安全 ...

  3. 数据库总结(五):创建与使用视图

    目录 1.简单化 2.安全性 3.逻辑数据独立性 [任务5.1]使用语句创建视图 1.创建视图 2.视图的规则和限制 [任务5.2]修改视图 1.使用create or replace view语句修 ...

  4. 项目5 创建与使用视图

    1.简单化 视图不仅可以简化用户对数据的理解,也可以简化对数据的操作.那些被经常使用的查询定义为视图,从而使用户在以后的操作中不必每次都指定全部的条件. 2.安全性 通过视图用户只能查询和修改他们所能 ...

  5. SwiftUI之深入解析如何创建和组合视图

    一.创建项目并体验画布 ① 系统要求 创建 SwiftUI 项目工程,体验画布.预览模式和 SwiftUI 模板代码: 要想在 Xcode 中预览画布中的视图,或者与画布中的视图进行交互,需要 Mac ...

  6. 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图

    Nikhil Kothari Microsoft Corporation 2000年8月 简介 Microsoft® Visual Studio.NET 的下一发行版包括 DataGrid Web 控 ...

  7. 【Flutter】创建 Flutter 项目 ( Android Studio 创建并运行 Flutter 应用 | 命令行创建并运行 Flutter 应用 | 运行 Flutter 应用三种方式 )

    文章目录 一.Android Studio 中创建 Flutter 项目 二.命令行创建 Flutter 项目 三.通过命令行方式运行 Flutter 项目 四.通过 Android Studio 可 ...

  8. SwiftUI之深入解析如何创建列表展示视图和列表如何导航跳转新页面

    一.前言 地标详情页视图已经创建完成,我们需要提供一种方式让用户可以查看完整的地标列表,并且可以查看每一个地标的详情.地标详情页视图的创建,请参考我的博客:SwiftUI之深入解析如何创建和组合视图. ...

  9. 后端技术:Java定时任务的五种创建方式

    Quartz表达式生成地址:http://cron.qqe2.com/ 支持生成定时任务表达式和反解析,使用Quartz表达式的定时任务如下 xxl-job springboot 的 @Schedul ...

最新文章

  1. IDEA中PlantUML的使用
  2. 通用makefile
  3. 视频编解码的理论和实践1:基础知识介绍
  4. RTL8111H-CG规格书 DATASHEET
  5. docker 发布应用时添加 git revision
  6. java基础知识——基础语法
  7. Java 使用反射处理注解
  8. android公网ip,android 获取公网ip 内网ip
  9. 开源硬件_如何参与开源硬件协会
  10. 机器学习(Andrew Ng)作业代码(Exercise 1~2)
  11. 每周荐书:机器学习、Spring MVC、Android(评论送书)
  12. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_9_常用的函数式接口_Consumer接口...
  13. 【FFmpeg4.1.4】音视频分离器
  14. PoE供电概述:PoE交换机是如何进行供电的?
  15. Laya ui 控件
  16. SAP BASIS ADM100 中文版 Unit 5(1)
  17. 爬虫网易LOFTER图片(适用于类似网页,如百度贴吧 )
  18. 国产化系统改造实践(未完)
  19. AXI总线学习(AXI34)
  20. linux如何定位内存泄漏,快速定位内存泄漏的套路(linux)

热门文章

  1. Linux下mysql 登录退出及常用命令
  2. Ubuntu查看系统信息(CPU、GPU信息)
  3. #USACO#Island Travels
  4. 2023创业可以做什么项目,适合新手的六个创业项目推荐
  5. crypto安装_Mac安装Golang和vscode
  6. 升级IE7.0的唯一理由
  7. [Python/转载]Python 100 Day : 初识Python
  8. 中医针灸学综合练习题库【8】
  9. vba给服务器发送消息,我如何发送一个HTTP POST请求使用VBA从Excel服务器?我如何发送一个HTTP POST请...
  10. 测试工程师mysql数据库基础操作之DQL 数据查询篇