简单插入查询和通过视图插入表中的差异

时间:2011-03-10 04:50:35

标签: sql sql-server sql-server-2005 tsql updatable-views

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

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

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

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

    INSERT INTO item values(...)
    
  3. 查询1和2有什么区别?也就是说,直接插入表格和使用视图插入表格。

    仅在我们在创建视图时使用CHECK OPTION时插入是否存在差异?

3 个答案:

答案 0 :(得分:3)

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

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

参考

答案 1 :(得分:2)

MS-SQL的细节:

  1. OMG小马的回答中有很多你想要的,从那里开始。

  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

  5. 关于MySQL的一些细节(可能对其他对VIEW很好奇的人有用): http://dev.mysql.com/doc/refman/5.0/en/view-updatability.html

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

答案 2 :(得分: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;