更新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都成功。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM