我正在研究sql中的视图,有些困惑并且有以下查询:
我有一个表'item',需要在其中插入数据。我使用两种方式,一种没有视图,另一种使用视图。
CREATE VIEW vw_item
SELECT * FROM item
通过视图插入:
INSERT INTO vw_item values(...)
通过表格插入:
INSERT INTO item values(...)
查询1和2有什么区别?也就是说,直接插入表格和使用视图插入表格。
仅在我们在创建视图时使用CHECK OPTION
时插入是否存在差异?
答案 0 :(得分:3)
两个INSERT语句之间没有区别。视图可以更新,但是对于使视图可更新的内容存在限制。
CHECK OPTION
可阻止不符合视图标准的更改。如果您的视图示例具有WHERE子句,则无法更新所涉及的列 - 但表中的其他列可能是。
答案 1 :(得分:2)
MS-SQL的细节:
OMG小马的回答中有很多你想要的,从那里开始。
关于VIEW的工作原理,根据How much space does a view take up in Microsoft SQL Server,视图在调用时仅“实现”(即检索数据),除非它是索引视图。
使用索引视图会增加插入/更新/删除的额外开销。资料来源:http://www.novicksoftware.com/Articles/Indexed-Views-Basics-in-SQL-Server-Page-4.htm
混杂。有关优化索引视图的信息:http://technet.microsoft.com/en-us/library/cc917715.aspx
关于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;