• 更新view是可以update到表的


    视图不是表,视图里面的数据是通过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都成功。

  • 相关阅读:
    ASP.NET MVC 5
    Web Components是不是Web的未来
    如何选择高性价比的控件产品
    ASP.NET MVC 5
    ubuntu系统安装
    Ubuntu linux安装完成后隐藏linux磁盘挂载点
    win10 查看本机的激活秘钥
    windows cmd下列出当前目录下的所有文件
    error LNK2005: “找到一个或多个多重定义的符号” 已经在 xxxx.obj 中定义 的解决方法
    架构设计:负载均衡层设计方案(3)——Nginx进阶
  • 原文地址:https://www.cnblogs.com/kakaisgood/p/11338795.html
Copyright © 2020-2023  润新知