视图不是表,视图里面的数据是通过sql语句去表中查询得到的。当表中的数据发送更改之后,视图里的数据也会发生相应的更改。所以我么一般有两种方式更新视图里面的数据:一是更新表中的数据,从而间接地更新视图中的数据;二是直接写sql已经更新视图。第一种是方式是一定可以的,第二中方法,能否可行取决于视图的具体结构。以下对第二种方法进行分析。

一、视图只包含一张表的字段

  1、包含全部字段

    视图定义如下:

DROP VIEW IF EXISTS t_student;
CREATE VIEW t_student AS
SELECT * FROM student
WITH CHECK OPTION; 

  该视图是查询student表中的所有记录,进行更新的语句如下。

1 INSERT INTO `t_student` VALUES ('10004', '赵六', 22, 'wang123'); -- 插入时如果其他未设置的字段有默认值,可以插入,如果没有就报错
2 UPDATE t_student SET name='赵六2' where id='10004'; -- 更新可以
3 DELETE FROM t_student WHERE id = '10004'; -- 删除也可以

  UPDATE,INSERT,DELETE,都是可以的。INSERT的时候,如果之增加部分字段的值,如果未增加的字段没有默认值,且不能为空,则报错。

  2、带有id的部分字段

    视图定义如下:

CREATE OR REPLACE VIEW t_student2 AS
SELECT  id, name, age FROM student;

  该视图查询student表中的id,name,age字段的记录,进行更新的语句如下:

INSERT INTO t_student2 VALUES ( 4,'wangwu', 30); -- 插入时如果其他字段有默认值,可以插入,如果没有就报错
UPDATE t_student2 SET name='王五2' where id='4'; -- 更新可以
DELETE FROM t_student2 WHERE id = 4; -- 删除也可以

  由于student表中password字段默认值为null,所以INSERT的时候password没有赋值,也是可以增加的,UPDATE和DELETE也是成功的。

  3、不带有id的部分字段

    视图定义如下:

CREATE OR REPLACE VIEW t_student3 AS
SELECT  name, age  FROM student;

  该视图查询student表中的name,age字段的记录,进行更新的语句如下:

1 INSERT INTO t_student3 VALUES ('wangwu', 30); -- id 没有默认值,不能插入
2 UPDATE t_student3 SET age=40 where name='wangwu'; -- 更新可以
3 DELETE FROM t_student3 WHERE name = 'wangwu'; -- 删除可以

  INSERT的时候id没有默认值,所以失败。UPDATE和DELETE都成功。

转载于:https://www.cnblogs.com/kakaisgood/p/11338795.html

更新view是可以update到表的相关推荐

  1. 3.5 《数据库系统概论》之基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(定义、查询、更新)

    文章目录 0.前言 1.思维导图 2.基本表更新---TABLE (1)插入数据---INSERT INTO ① 插入元组 ② 插入子查询结果 (2)修改数据---UPDATE SET ① 修改某一个 ...

  2. 笔记:3.5 《数据库系统概论》之基本表更新(INSERT、UPDATE、ALTER、DELETE)与视图VIEW(定义、查询、更新)

    转载:3.5 <数据库系统概论>之基本表更新(INSERT.UPDATE.ALTER.DELETE)与视图VIEW(定义.查询.更新)_BitHachi-CSDN博客 0.前言 数据库是S ...

  3. mysql update 联合更新_Mysql update多表联合更新的方法小结

    下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法 student表 class表 1. 执行 UPDATE student s , clas ...

  4. Oracle 共享锁和排它锁、 DML和DDL锁、 for update 锁表的问题

    共享锁和排它锁 oracle有两种模式的锁:排他锁(exclusive lock,即X锁)和共享锁(share lock,即S锁). 共享锁:如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享 ...

  5. efcore根据多个条件更新_EFCore.Sharding(EFCore开源分表框架)

    简介 本框架旨在为EF Core提供Sharding(即读写分离分库分表)支持,不仅提供了一套强大的普通数据操作接口,并且降低了分表难度,支持按时间自动分表扩容,提供的操作接口简洁统一. 源码地址:E ...

  6. 更新SQL Server实例所有数据库表统计信息

    引出问题 自从上次菜鸟为老鸟解决了<RDS SQL SERVER 解决中文乱码问题>问题,老鸟意犹未尽,决定再想个招来刁难刁难菜鸟:"我最近做T-SQL性能调优的时候,经常发现执 ...

  7. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  8. SQL update 多表连接方法

    SQL Update多表联合更新的方法 (1) sqlite 多表更新方法 //---------------------------------- update t1 set col1=t2.col ...

  9. oralc UPDATE关联表的思路总结

    我做了一下UPDATE关联表的思路总结,希望对不知道的同学有帮助! 我最近一直想研究一下UPDATE语句,尤其是多表关联 UPDATE的时候,很容易出问题,于是我就在PUB上问,在资料上查,现在我终于 ...

最新文章

  1. sir跟seir模型有啥区别_H3C B5mini拆机,看一下跟B5有啥区别
  2. HTTP1.0、HTTP1.1 、SPDY、HTTP2.0之演变过程和优化
  3. java泛型程序设计——通配符类型+通配符的超类型限定
  4. pca数学推导_PCA背后的统计和数学概念
  5. 《大数据》专题征文:医学大数据(截稿时间:2020年5月31日)
  6. 关于判断后该数据类型是否发生了转变
  7. Oracle 学习笔记二 Create table
  8. java设置关闭计算机,java实现电脑定时关机的方法
  9. 免费下载思维导图模板的方法
  10. PE格式文件修复过程
  11. 模拟题 czy的后宫
  12. 【统计学笔记】各种假设检验的假设的建立和各统计量公式总结
  13. 如何做一个讨厌的女人
  14. 给刚入市朋友的几点建议
  15. ping一个地址回显无法访问目的主机,然后显示请求超时time out问题分析
  16. 一本专门学习PyQt5 GUI 的编程书
  17. CSS 重要属性与定位
  18. C. Chocolate Bunny(思维+规律)
  19. 360与腾讯的连横合纵
  20. 有一种程序员的浪漫叫做,有程序为你宕过机

热门文章

  1. 树莓派3 64linux,树莓派3 model b安装64位debian+qt5.9
  2. php文件下载教学,php下载文件的代码示例
  3. html流程图可新增删除,CSS / HTML流程图
  4. java中strictfp关键字,java strictfp关键字用法大全详解
  5. 【机器学习入门到精通系列】插值与拟合
  6. python【蓝桥杯vip练习题库】ALGO-118连续正整数的和(枚举优化)
  7. Java的基础方法Java的对象_java基础之 创建对象的几种方式
  8. h5 数字变化_前端/h5 D3.js实现根据数据动态更新图形/类似进度实时变化效果
  9. python程序设计课程设计二级减速器_机械工程专业的本科生应该自学哪些知识?...
  10. python project_GitHub - DeqianBai/Python-Project: A series of python projects