0

我正在研究 sql 中的视图并且有些困惑并且有以下查询:

我有一个表“项目”,需要在其中插入数据。我使用两种方式,一种没有视图,另一种使用视图。

CREATE VIEW vw_item
SELECT * FROM item
  1. 通过视图插入:

    INSERT INTO vw_item values(...)
    
  2. 通过表格插入:

    INSERT INTO item values(...)
    

查询1和2有什么区别?也就是说,直接插入到表中并使用视图插入到表中。

CHECK OPTION仅当我们在创建视图时使用时,插入是否有区别?

4

3 回答 3

3

两个 INSERT 语句之间没有区别。视图可以是可更新的,但对于使视图可更新的内容存在限制。

CHECK OPTION防止不符合视图标准的更改。如果您的视图示例有 WHERE 子句,则无法更新所涉及的列 - 但表中的其他列可以。

参考

于 2011-03-10T05:04:50.823 回答
2

MS-SQL 的细节:

  1. OMG Ponies 的答案包含您正在寻找的大部分内容,从那里开始。

  2. 关于 VIEW 的工作原理,根据How much space does a view take up in Microsoft SQL Server,视图仅在调用时“物化”(即检索数据),除非它是索引视图。

  3. 拥有索引视图会增加插入/更新/删除的额外开销。资料来源:http ://www.novicksoftware.com/Articles/Indexed-Views-Basics-in-SQL-Server-Page-4.htm

  4. 杂项。有关优化索引视图的信息:http ://technet.microsoft.com/en-us/library/cc917715.aspx

MySQL 的一些细节(可能对其他对 VIEW 感兴趣的人有用): http ://dev.mysql.com/doc/refman/5.0/en/view-updatability.html

其他数据库服务器可能在性能/索引/可更新性方面略有不同,因此请记住对于您的特定数据库。

于 2011-03-10T05:01:23.183 回答
0
CReate table param1(id int,num int);
CReate table param2(id int,num int);
INSERT INTO param1 VALUES(1,1),(2,2),(3,3);
INSERT INTO param2 VALUES(1,1),(4,4),(3,3); 


CREATE VIEW vie(id) AS 
SELECT Id FROM param1 WHERE num IN (SELECT num FROM param2); 

INSERT INTO  vie VALUES(100); 
SELECT * FROM vie;
SELECt * FROM param1;
于 2015-01-31T11:10:26.817 回答