视图的可更新性与视图中查询的定义是有关的

一、mysql中那些试图使不可更新的?以下类型的视图是不可更新的

1.包含以下关键字的sql语句:聚合函数(sum、min、max、count)、distinct、group

by 、having、union或者uinon all

2.常量视图

3.select

中包含子查询

4.join

5.from一个不可更新的试图

6.where字句的子查询引用了from字句中的表

二、更新视图条件限制

WITH[CASCADED | LOCAL] CHECK OPTION确定了更新视图的条件。

LOCAL代表只要满足本视图的条件就可以更新

CASCADED

则必须满足所有针对该视图的所有视图条件才可以更新

如果没有明确是local还是cascade,默认是cascade

为了便于理解还是通过实例来说明

已知t3表的数据结构如下:

-- 创建视图 ldq_t1

CREATE VIEW ldq_t1 AS

SELECT

*

FROM

t3

WHERE id1 > 10 WITH CHECK OPTION ;

-- 查询ldq_t1中的所有结果

SELECT * FROM ldq_t1;

-- 创建视图 ldq_t2

CREATE VIEW ldq_t2 AS

SELECT

*

FROM

ldq_t1

WHERE id1 < 30 WITH LOCAL CHECK OPTION ;

-- 创建视图 ldq_t3

CREATE VIEW ldq_t3 AS

SELECT

*

FROM

ldq_t1

WHERE id1 < 30 WITH CHECK OPTION ;

-- 更新视图ldq_t2(只有ldq_t2中存在的数据都可以更新)

SELECT * FROM ldq_t2; -- 查看ldq_t2当前记录

UPDATE ldq_t2 SET id1=5 WHERE id2=22; -- 可以执行成功

UPDATE ldq_t2 SET id1=35 WHERE id2=22; -- 将会报错CHECK OPTION failed(因为执行该语句之后,id2=22记录将从ldq_t2消失)

UPDATE ldq_t2 SET id1=28 WHERE id2=22; -- 可以执行成功

-- 更新ldq_t3

SELECT * FROM ldq_t3;

UPDATE ldq_t3 SET id1=5 WHERE id2=22; -- 将会报错CHECK OPTION failed(因为数据更新之后,必须还要保证其仍然在ldq_t3和ldq_t1之中,

该语句执行后id2=22记录将从ldq_t1消失)

UPDATE ldq_t3 SET id1=15 WHERE id2=22; -- 能够执行成功

UPDATE ldq_t3 SET id1=35 WHERE id2=22; -- 将会报错CHECK OPTION failed(因为执行该语句之后,id2=22记录将从ldq_t3消失)

DELETE FROM ldq_t3 WHERE id2=22; -- 执行成功

总结:WITH

LOCAL CHECK OPTION 修饰的视图,在更新的时候,只需要保证更新后的记录仍然存在该视图中就可以了,否认报错。而WITH CASCADED CHECK OPTION修饰视图,必须保证更新后的记录仍然存在该视图以及跟该视图有关系的试图中就可以了。

以上就是mysql中视图更新详解的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

mysql视图的更新 条件_mysql中视图更新详解相关推荐

  1. mysql的explain怎么看_mysql中explain用法详解

    如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...

  2. mysql时间戳是什么意思_mysql中TIMESTAMP时间戳详解

    在mysql数据库中,时间戳TIMESTAMP有如下的一些变体: 1,TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 在 ...

  3. explain mysql怎么用_mysql中explain用法详解

    EXPLAIN用于SELECT语句中的每个表返回一行信息.表以它们在处理查询过程中将被MySQL读入的顺序被列出 如果在select语句前放上关键词explain,mysql将解释它如何处理selec ...

  4. mysql常见关键字的用法_MySQL 常用关键字用法详解

    MySQL 常用关键字用法详解 在开发工程中,操作数据库的时候经常会有不同类型的条件查询,除了使用where外,Mysql本身也提供了很多常用的关键字.本文主要介绍一些常用的关键字,像update.i ...

  5. mysql索引linke和等于_MySQL之SQL优化详解(三)

    摘要: 致索引失效而转向全表扫描存储引擎不能使用索引中范围条件右边的列mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描isnull,isnotnull也无法使用索引l ...

  6. mysql数据库字段类型大全_mysql数据库字段类型详解

    MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...

  7. mysql慢查询的使用_mysql慢查询使用详解

    1 慢查询定义指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句.慢查询日志就是记录这些sql的日志. 2 开启慢查询日志 找到mysql配置文件my.cnf.在 ...

  8. mysql的所有聚合函数_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  9. mysql inner join多条件_Mysql中Left Join Right Join Inner Join where条件的比较

    建立一对多的表 company 和 employee company表 id      name      address 1baidu北京 2huawei深圳 3jingdong北京 4tengxu ...

最新文章

  1. 详细的线程池讲解,手写C与C++版本
  2. 利用vue和jQuery实现中国主要城市搜索与选择
  3. kail Linux 安装Parallels Tools
  4. jvm默认垃圾收集器
  5. SAP CDS view里如何定义association
  6. Java File类File [] listFiles()方法(带示例)
  7. 2.5 结构化程序设计的方法
  8. sparkR介绍及安装
  9. 微信小程序云函数传递数组_微信小程序云开发一周入门
  10. smali-2.2.4.jar baksmali-2.2.4.jar
  11. Linux下学习进程控制
  12. Apache Flink 零基础入门(二):开发环境搭建和应用的配置、部署及运行
  13. js中立即执行函数会预编译吗_浅析Vue的生命周期以及JS异步
  14. flume学习(五):使用hive来分析flume收集的日志数据
  15. 计算机图形学 之 中点画线算法
  16. 【Android】achartengine的柱状图和饼状图的使用
  17. linux的账号锁定
  18. Java Email文件传输
  19. 2013,手游迎首轮大洗牌,小团队如何存活
  20. 大学计算机品牌活动总结,大学活动总结(精选5篇)

热门文章

  1. 熊猫卫士因特网安全2007铂金版
  2. VC++中定时器SetTimer函数的应用总结
  3. Meteor - Android 打包
  4. 2020年中国大学生程序设计竞赛(CCPC) - 网络选拔赛部分题解
  5. 2019hbcpc(第三届河北省大学生程序设计竞赛)
  6. 设计模式之王者原则 开闭原则
  7. 花式秀恩爱,利用Python给情书加密,让女朋友甜蜜满满
  8. Java字符串池西安尚学堂
  9. 使用Geomagic处理点云一般步骤
  10. 什么运动耳机好用、五款运动耳机推荐性价比清单