2017-01-22 71 views
-2

我目前正在研究意見......但我看到有一個視圖類型「與檢查選項」(transact sql)...我kindda困惑它是做什麼...請小小的幫助SQL查看與檢查選項

+0

提示:請查看「CREATE VIEW」文檔。 –

+0

@GordonLinoff @GordonLinoff我檢查了w3schools,但沒有什麼... – john

+0

@GordonLinoff仍然檢查了一些其他的文檔,甚至有更多的困惑...似乎w3schools更好地解釋它 – john

回答

0

它不是視圖類型,而是視圖選項,它使視圖函數成爲插入/更新操作的約束。
只有當視圖可以檢索到插入的記錄時,才能通過視圖向表中插入記錄或將記錄插入表中。
只有當視圖可以檢索更新的記錄時,才能通過視圖更新表的記錄。

PostgreSQL的演示

create table mytable (i int); 
create view myview as select i from mytable where i <= 10 with check option; 

insert into myview (i) values (1),(2),(3); 

19:26:00 [INSERT - 3 rows, 0.010 secs] Command processed ... 1 statement(s) executed, 3 rows affected, exec/fetch time: 0.010/0.000 sec [1 successful, 0 errors]

insert into myview (i) values (11); 

19:26:20 [INSERT - 0 rows, 0.000 secs] [Code: 0, SQL State: 44000] ERROR: new row violates check option for view "myview" Detail: Failing row contains (11). ... 1 statement(s) executed, 0 rows affected, exec/fetch time: 0.000/0.000 sec [0 successful, 1 errors]

update myview set i=i*10 where i=1; 

19:27:29 [UPDATE - 1 rows, 0.000 secs] Command processed ... 1 statement(s) executed, 1 rows affected, exec/fetch time: 0.000/0.000 sec [1 successful, 0 errors]

update myview set i=i*10 where i=2; 

19:27:42 [UPDATE - 0 rows, 0.000 secs] [Code: 0, SQL State: 44000] ERROR: new row violates check option for view "myview" Detail: Failing row contains (20). ... 1 statement(s) executed, 0 rows affected, exec/fetch time: 0.000/0.000 sec [0 successful, 1 errors]

+0

檢查更新的答案 –