数据库之视图更新

视图定义---视图是从一个 或多个表(或视图) 导出的虚拟表 ,视图是数据库系统提供给用户以多种角度观察数据的重要机制

视图是一个虚表,不是实际存储的数据,更新视图是指更新视图的基本表,但不是所有的视图都能够进行更新,所以视图可以分为可更新视图不可更新视图

可更新视图有三种:

(1).同时满足以下条件

a. 创建时select中没有聚合函数,也没有top,groupby,union子句及Distinct关键字;

b.创建视图的select 不包含从基本表中通过计算所得到的列;

c. from子句中至少有一个基本表;

总结就是不能包含基本表中不存在的数据

(2). 可更新的分区视图

(3). 通过Instead of 触发器创建的可更新视图

更新视图注意事项:

Insert :插入数据到可更新视图时应该注意,如果视图由多个基本表组成则不能使用Insert插入数据到视图

Update: 如果视图依赖多个基本表,一次的更新操作 只能变动一个基本表数据,不能在一次update中同时更新两个表的内容

Delete: 如果包含多个基本表(不包括分区表),则不能使用delete 删除视图的数据

PS:视图不能创建索引;不能把规则,默认值和触发器与视图相关联

另外创建视图时候如果添加了 With Check Option  则更新视图时候即增,删,改时候,系统首先会检查你的改变是否满足定义时候的条件(where),如果不满足则拒绝执行,比如你视图查的是所有计算机类别的书,但是插入,修改时候却更新为了金融类 的书时候是不能执行的。

时间: 2024-10-24 15:40:44

数据库之视图更新的相关文章

(转)数据库中视图的作用

最近在做一个功能,是和别的项目组一起合作的. 背景:现在要做一个用户管理的系统,需要我们提供服务来实现和原始数据库的兼容,但是现在我们的数据库和网站数据库中存储的内容或者说是字段有些不同,但是我们还是希望可以的话,将改动降低到最小,当然,这只是我的初步了解,现在具体的情况还没有很了解,为了这方面的应用,上网了解了一下数据库的相关操作,了解到“视图”是个比较有利的武器可以解决这个问题. 视图是从一个或几个基本表(或视图)导出的表.它与基本表不同,是一个虚表.数据库只存放视图的定义,而不存放视图对应

MySQL视图更新

昨天在写美团2019秋招笔试题的时候遇到了关于视图是否能更新的问题,突然感觉这个问题之前复习的时候重点关注过,但是却又想不全.今天特地搜了一些资料总结一下.本文主要说明视图的更新限制,如需关于视图的更多知识,参考:MySql视图原理讲解与使用大全 视图简介 视图不是表,不能直接存储数据,是一张虚拟的表,视图和数据库的表存在着对应的关系,我们在某些情况下是可以通过视图来操作数据库的表,这样可以简化查询操作(一般情况下视图是用来查询用的),在某种条件下是可以利用视图来更新数据库表中的数据的,后面会提

EF Core 2.0中如何手动映射数据库的视图为实体

由于Scaffold-DbContext指令目前还不支持自动映射数据库中的视图为实体,所以当我们想使用EF Core来读取数据库视图数据的时候,我们需要手动去做映射,本文介绍如何在EF Core中手动映射数据库的视图为实体. 假设我们在SQL Server中有如下数据库视图[dbo].[V_Person]: CREATE VIEW [dbo].[V_Person] AS SELECT ID, Code, Name, CreateTime, UpdateTime FROM dbo.Person G

数据库字段关联更新

MS SQL Server 子查询更新: update log set uin= b.uin from log a,logs b where a.accountuin = b.accountuin mysql 更新: update t_stat_month_user a INNER JOIN t_dept b on a.op_dept=b.op_id set a.dept_short_name=b.dept_short_name; 数据库字段关联更新,布布扣,bubuko.com

crawldb数据库内容得到更新

inject操作结果:crawldb数据库内容得到更新,包括URL及其状态. 看一下inject调用的函数: public voidinject(Path crawlDb, Path urlDir) throwsIOException { //产生一个文件名是随机的临时文件夹 Path tempDir = newPath(getConf().get("mapred.temp.dir", ".") + "/inject-temp-" + Integ

PHP对于数据库的基本操作——更新数据

PHP对于数据库的基本操作--更新数据 主要的语句:$update = mysql_query("update user set password='abc' where username='123'"); 这句话的意思是,更新user表,设置passWord字段的值为abc,筛选条件为username为123的数据.就是修改user表里面username为123字段里面的password,将password的值为abc. 前面的随笔里面忘了说  where 这个了,这个我理解为筛选,

开源一个适用iOS的数据库表结构更新机制的代码

将前段时间开源的代码,发布一下: ARDBConfig On the iOS, provide a database table structure update mechanism, ensure that the user in any version of the installer, the database structure to ensure adapter. (在iOS上,提供一个数据库表结构更新的机制,保证用户无论从哪个版本安装程序,数据库结构保证适配.) 如:用户A的数据库版

Sharepoint2010 列表默认视图更新

Sharepoint2010 列表默认视图更新 1.简介 利用cmdlet脚本管理sharepoint项目是很方便的,但是对对于脚本语言接触较少的我来说写起来废了很大力气.需求  利用sharepoint开发门户管理,客户那边提出要求文档可默认视图每页显示15条,图片库每页显示12条.由于创建的站点.子网站.库很多.要是一个个改那样很容易漏掉摸个库,而且说不定改天又心情不爽又要修改每页显示的条数.所以写个脚本跑下解决问题吧 2.指令集讲解 这里先对有的指令简单说下 ForEach-Object{

vue数组对象修改触发视图更新

直接修改数组元素是无法触发视图更新的,如 this.array[0] = { name: 'meng', age: 22 } 修改array的length也无法触发视图更新,如 this.array.length = 2; 触发视图更新的方法有如下几种 1. Vue.set 可以设置对象或数组的值,通过key或数组索引,可以触发视图更新 数组修改 Vue.set(array, indexOfItem, newValue) this.array.$set(indexOfItem, newValue