建立视图的时候使用WITH CHECK OPTION 与不使用的区别
WITH CHECK OPTION | |||
insert | update | delete | |
使用with check option | 保证insert后,数据要被视图查询出来 | 保证update后,数据要被视图查询出来 | 无要求 |
未使用with check option | 无要求 | 无要求 |
无要求 |
--========================================建立测试表TAB --DROP TABLE TAB CREATE TABLE TAB ( ID INT, NAME VARCHAR(10), LOC VARCHAR(100) ) ---=======================================插入业务数据测试 INSERT INTO TAB SELECT 1,'JACK','ChangSha' UNION ALL SELECT 2,'TOM','ShangHai' UNION ALL SELECT 3,'JACK','Kunming' UNION ALL SELECT 4,'JACK','Hubei' --===================================建立视图 --1.含有WITH CHECK OPTION的 --DROP VIEW V_WCO GO CREATE VIEW V_WCO AS SELECT * FROM TAB WHERE NAME='TOM' WITH CHECK OPTION; --2.不含有WITH CHECK OPTION的 --DROP VIEW V_WCO_2 CREATE VIEW V_WCO_2 AS SELECT * FROM TAB WHERE NAME='TOM' --================更新视图============-- --###########===INSERT===############-- --INSERT 视图查询结果集中不包含的记录 Insert into V_WCO SELECT 5,'JACK','QuJin' --INSERT 视图查询结果集中包含的记录 insert into V_WCO SELECT 5,'TOM','QuJin' /* 消息 550,级别 16,状态 1,第 1 行 试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了 WITH CHECK OPTION,而该操作的一个或多个结果行又不符合 CHECK OPTION 约束。 语句已终止。 */ --###########===DELETE===############-- delete from V_WCO where ID=1 /* (0 行受影响) */ --###########===UPDATE===############-- ---update V_WCO update V_WCO set NAME='已更新' WHERE ID=1 --(0 行受影响) update V_WCO set NAME='已更新' WHERE ID=2 --(1 行受影响)