Разница в простом запросе вставки и вставке через представление в таблицу - PullRequest
0 голосов
/ 10 марта 2011

Я изучаю представления в SQL и несколько запутался и имею следующий запрос:

У меня есть таблица 'item', и мне нужно вставить в нее данные. Я использую два способа, один без представления, а другой с использованием представления.

CREATE VIEW vw_item
SELECT * FROM item
  1. Вставка через представление:

    INSERT INTO vw_item values(...)
    
  2. Вставка через таблицу:

    INSERT INTO item values(...)
    

В чем разница в запросах 1 и 2? То есть непосредственно вставляя в таблицу и используя представление для вставки в таблицу.

Есть ли разница во вставке, только когда мы используем CHECK OPTION при создании представления?

Ответы [ 3 ]

3 голосов
/ 10 марта 2011

Нет никакой разницы между двумя операторами INSERT.Представления могут быть обновляемыми, но существуют ограничения на то, что делает обновляемыми представления.

CHECK OPTION предотвращает изменения, которые не соответствуют критериям представления.Если в вашем примере представления есть предложение WHERE, соответствующие столбцы не могут быть обновлены, но могут быть и другие столбцы в таблице.VIEW (Transact-SQL)

2 голосов
/ 10 марта 2011

особенности MS-SQL:

  1. Ответ OMG Ponies содержит большую часть того, что вы ищете, начните там.

  2. Относительно того, как работает VIEW, в соответствии с Сколько места занимает представление в 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

Другие серверы баз данных, вероятно, имеют небольшие различия в производительности / индексации / обновляемости, поэтому имейте это в виду для вашей конкретной базы данных.

0 голосов
/ 31 января 2015
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;
...