`

视图——ALGORITHM

阅读更多

修改视图需要create view 和 delete 权限。

表和视图的命令在同一个命名空间中,所以同一个数据库不能有表名和视图名重复。

可以对其他数据库中的表建视图

视图的定义有以下的限制:
1、from子句中不能有子查询
2、select不能指向系统或者用户的变量
3、select不能指向prepared语法参数
4、定义中的表或视图必须存在
5、不能对临时表建视图,也不能建临时视图
6、视图定义中的表名必须已经存在
7、不能在触发器和视图之间建关联


ORDER BY可以用在视图定义中,但是如果访问视图的select中使用的order by,则视图定义中的ORDER BY被忽略。

语法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

ALGORITHM扩展了标准sql,有三个值,默认值是UNDEFINED,预算法则决定了mysql如何处理视图。
对于临时表方式,会将视图的结果放置到临时表中,然后使用临时表执行sql,这样的好处是在临时表建完之后,就会释放在原表上面的锁,这样比MERGE方式更快的释放在访问的表上的锁。
对于UNDEFINED方式,是指有系统自己决定使用临时表方式还是MERGE方式,MERGER方式更高效,且临时表方式不能更新视图的数据。

对于MERGE方式,实际上是把访问视图的SQL拼接到视图本身的sql上面。要求视图的行和表的行之间是一一对应的,如果不存在
这样的一一对应的关系,则会切换到临时表算法。
包含以下关键字的sql,不能使用merge方式:
聚合函数(sum,min,max,count等等)
distinct
group by
having
union或者union all
常量视图

另外,这些视图的纪录也是不能更新和删除的,不能更新和删除纪录的视图除了以上那些情况外,还包括:
select中包含子查询
join
from一个不能更新的视图
from一个表的子查询
算法是临时表的视图

如果视图还想要可以插入纪录,则必须满足以下条件:
视图必须包含基表没有默认值的所有字段
视图列必须是简单的对应表的列,没有在上面进一步的处理。

多于多表视图的可更新性:
首先必须是基于MERGE算法的
表连接必须是内连接
视图中只有一个单表是可以被更新的。

对于多表可更新视图,如果插入其中一个单表是可以的,删除纪录是不允许的

WITH [CASCADED | LOCAL] CHECK OPTION决定了是否允许更新数据使纪录不再满足视图的条件。
这个选项和oracle是类似的
local是只要满足本视图的条件就ok
cascade则是必须满足所有针对该表的所有视图的条件才ok。
如果没有明确是local还是cascade,则默认是cascade。


删除视图:
DROP VIEW [IF EXISTS]
view_name [, view_name] ...
[RESTRICT | CASCADE]

显示视图内容:
SHOW CREATE VIEW view_name

分享到:
评论

相关推荐

    第11章 数据库视图PPT

    11.2.1 **创建视图的语法形式**:创建视图使用`CREATE VIEW`语句,可以包含`OR REPLACE`选项来替换已存在的视图,还可以指定`ALGORITHM`(默认、合并或临时表)来定义处理视图的方式。 11.2.2 **在单表上创建视图**...

    Multi-view Low-rank Sparse Subspace Clustering Algorithm代码及各种数据集

    标题中的“Multi-view Low-rank Sparse Subspace Clustering Algorithm”是一种先进的数据聚类技术,用于处理多视图数据。在机器学习和数据挖掘领域,数据往往可以从不同的角度或视图获取,比如图像可以有颜色、纹理...

    Content-Aware Prediction AlgorithmWith Inter-View Mode Decision for MVC

    本文提出了一种新的快速预测算法——内容感知预测算法(Content-Aware Prediction Algorithm, CAPA),该算法结合了视图间的模式决策(Inter-View Mode Decision),用于多视图视频编码(Multiview Video Coding, ...

    Algorithm-my-code-store.zip

    《算法与编程实践——以Algorithm-my-code-store.zip为例》 在信息技术领域,算法与编程是两个至关重要的概念,它们构成了软件开发的基石。本篇将深入探讨“Algorithm-my-code-store.zip”这一压缩包中所蕴含的算法...

    Algorithm-geom.zip

    "Algorithm-geom.zip"这个压缩包文件,以其独特的名称"Algorithm-geom",揭示了其核心内容——几何运算算法。这是一类专门处理空间几何对象和形状的算法,广泛应用于图形学、GIS(地理信息系统)、机器人路径规划、...

    Algorithm-supercluster.zip

    "Algorithm-supercluster.zip" 文件集合,提供了一个专用于浏览器和节点的高效地理空间点群集库——Supercluster。这个库的出现,极大地优化了大规模地理数据的处理效率,使得用户能够在有限的计算资源下,快速地...

    A SIMPLE ALGORITHM FOR FINDING FAST, EXACTLY TILES INTERSECT WITH POLYGONS

    瓦片系统是现代网络地图服务(如微软的必应地图和谷歌地图)的基础,它们由成千上万的独立渲染图像组成,这些图像拼接在一起形成一个完整的地图视图。例如,微软的瓦片系统支持24级地图,这意味着需要渲染并存储从4^...

    AI实验之——TSP问题

    在这个名为“AI实验之——TSP问题”的项目中,我们主要关注的是旅行商问题(Traveling Salesman Problem, TSP)的解决方案。旅行商问题是一个经典的组合优化问题,它的目标是寻找一个最短的可能路线,使得旅行商可以...

    IOS应用源码——类似于谷歌地图线路搜索的一个组件demo.zip

    这个压缩包文件“IOS应用源码——类似于谷歌地图线路搜索的一个组件demo.zip”是一个iOS开发相关的资源,包含了一个示例项目,旨在模仿谷歌地图的路线搜索功能。在iOS开发中,构建这样的功能需要掌握一系列的关键...

    滚屏动作游戏——太空保卫战

    《滚屏动作游戏——太空保卫战》是一款基于Android平台的经典游戏,它为初学者提供了学习Android游戏开发的宝贵资源。这款游戏的设计理念是让玩家扮演太空守卫者,抵御一波又一波的外星入侵,通过滚动屏幕来操控飞机...

    IOS应用源码——TouchTest判斷CGPoint 在一個多邊形裡.rar

    【标题】"IOS应用源码——TouchTest判斷CGPoint 在一個多邊形裡.rar" 提供的是一个iOS应用的源代码,主要功能是检测用户触摸的CGPoint是否位于一个多边形内部。这个应用对于理解iOS应用开发,尤其是图形交互和几何...

    安卓Android源码——不规则点击区域 三角形点击区域.zip

    在Android中,通常我们需要继承`View`或`ViewGroup`类来创建自定义视图。对于三角形点击区域,我们可以创建一个自定义`View`,并在其中处理触摸事件。 2. **绘制三角形** - 使用`Path`对象:首先,你需要创建一个...

    VS2010——VC++.rar

    3. **C++标准库**:VS2010支持C++标准库,包括iostream用于输入输出,vector和array实现动态数组,string处理字符串,algorithm提供各种算法如排序、查找等,这些都极大地扩展了C++的功能。 4. **MFC框架**:MFC是...

    安卓开发常用词汇——02

    例如,在安卓开发中,可以是一组视图(Views)或者是一组Activity。 - **几个**:用于描述少量的对象或属性,比如“几个配置选项”可能指的是几个需要设置的关键参数。 - **一种**:表示单个类别或类型的提及。在...

    大学课程计算机图形学作业——基于VS的MFC实现的画图工具

    CView类则通常作为文档视图架构中的视图部分,负责与用户交互和显示数据。 在这个项目中,学生可能需要创建一个继承自CView的自定义类,该类将实现画图功能。这包括响应鼠标事件(如WM_MOUSEMOVE, WM_LBUTTONDOWN, ...

    网上订餐系统,Java ,jsp

    信息摘要算法,如MD5(Message-Digest Algorithm 5)或SHA(Secure Hash Algorithm),用于保证数据的完整性和安全性。在登录过程中,用户的密码通常会经过信息摘要算法处理后再存储,这样即使数据库被泄露,也无法...

    ZLG_GUI.zip_ZLG_GUI

    例如,它可能采用了模型-视图-控制器(MVC)或者模型-视图-视图模型(MVVM)的架构,以便分离业务逻辑、数据模型和用户界面。这样的设计有助于代码的可维护性和扩展性。 总的来说,ZLG_GUI是一个强大的工具,它集成...

    迷宫小游戏

    《迷宫小游戏——递归与QT的视觉盛宴》 在编程的世界里,迷宫游戏是一种经典而富有挑战性的项目,它结合了算法设计、数据结构和用户交互等多个方面。本项目利用递归的思想来设计迷宫,同时借助QT库实现了迷宫的可视...

    计算机网络实验报告 模拟实现路由算法

    【计算机网络实验报告——模拟实现路由算法】 在计算机网络领域,路由算法是网络通信的核心组成部分,它们决定了数据包在网络中的传输路径。本实验报告详细介绍了几种重要的路由算法,并通过模拟实现来加深理解。...

    match-app-源码.rar

    源码中可能会有专门的类或函数实现这一功能,例如"MatchEngine"或"SearchAlgorithm"。我们需要研究这些算法的实现,理解它们如何处理和比较用户数据,以生成最合适的匹配结果。 再者,数据管理是另一个关键方面。...

Global site tag (gtag.js) - Google Analytics