前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL视图更新

MySQL视图更新

作者头像
lin_zone
发布2018-10-10 11:06:04
3.2K0
发布2018-10-10 11:06:04
举报
文章被收录于专栏:LIN_ZONELIN_ZONE

昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全。今天特地搜了一些资料总结一下。本文主要说明视图的更新限制,如需关于视图的更多知识,参考:MySql视图原理讲解与使用大全

  1. 视图简介
    1. 视图不是表,不能直接存储数据,是一张虚拟的表,视图和数据库的表存在着对应的关系,我们在某些情况下是可以通过视图来操作数据库的表,这样可以简化查询操作(一般情况下视图是用来查询用的),在某种条件下是可以利用视图来更新数据库表中的数据的,后面会提到视图的更新。
    2. 一般情况下,在创建有条件限制的视图时,加上 "WITH CHECK OPTION"命令
  2. 视图的更新问题 某些视图是可更新的。也就是说,可以在UPDATE、DELETE或INSERT等语句中使用它们,以更新基表的内容。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。如果视图包含下述结构中的任何一种,那么它就是不可更新的:
代码语言:txt
复制
1. 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。
2. DISTINCT
3. GROUP BY
4. HAVING
5. UNION或UNION ALL
6. 位于选择列表中的子查询
7. Join
8. FROM子句中的不可更新视图
9. WHERE子句中的子查询,引用FROM子句中的表。
10. 仅引用文字值(在该情况下,没有要更新的基本表)。
11. ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。

注意:

视图中虽然可以更新数据,但是有很多的限制。一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。

WITHCASCADED|LOCAL CHECK OPTION能不能决定视图是否能更新?

  1. 这两个参数的基本定义如下: LOCAL参数表示更新视图时只要满足该视图本身定义的条件即可。 CASCADED参数表示更新视图时需要满足所有相关视图和表的条件。没有指明时,该参数为默认值。
  2. 对于with check option用法,总结如下:
    1. 视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过视图来操作。
    2. 对于update,有with check option,要保证update后,数据要被视图查询出来
    3. 对于delete,有无with check option都一样
    4. 对于insert,有with check option,要保证insert后,数据要被视图查询出来
    5. 对于没有where 子句的视图,使用with check option是多余的

本文参考:MySql视图原理讲解与使用大全 和之前视图学习笔记

如需转载请注明出处:https://cloud.tencent.com/developer/article/1352613

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-09-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WITHCASCADED|LOCAL CHECK OPTION能不能决定视图是否能更新?
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档