1、有些视图是不可更新的,因为这些视图的更新不能唯一有意义地转换为相应的基本表。
2、一般来说,可以更新行列子集视图。除列子集视图外,理论上还可以更新一些视图。
实例
--创建视图ldq_t1 CREATEVIEWldq_t1AS SELECT * FROM t3 WHEREid1>10WITHCHECKOPTION; --查询ldq_t1中的所有结果 SELECT*FROMldq_t1; --创建视图ldq_t2 CREATEVIEWldq_t2AS SELECT * FROM ldq_t1 WHEREid1<30WITHLOCALCHECKOPTION; --创建视图ldq_t3 CREATEVIEWldq_t3AS SELECT * FROM ldq_t1 WHEREid1<30WITHCHECKOPTION; --更新视图ldq_t2(只有ldq_t2中存在的数据都可以更新) SELECT*FROMldq_t2;--查看ldq_t2当前记录 UPDATEldq_t2SETid1=5WHEREid2=22;--可以执行成功 UPDATEldq_t2SETid1=35WHEREid2=22;--将会报错CHECKOPTIONfailed(因为执行该语句之后,id2=22记录将从ldq_t2消失) UPDATEldq_t2SETid1=28WHEREid2=22;--可以执行成功 --更新ldq_t3 SELECT*FROMldq_t3; UPDATEldq_t3SETid1=5WHEREid2=22;--将会报错CHECKOPTIONfailed(因为数据更新之后,必须还要保证其仍然在ldq_t3和ldq_t1之中,该语句执行后id2=22记录将从ldq_t1消失) UPDATEldq_t3SETid1=15WHEREid2=22;--能够执行成功 UPDATEldq_t3SETid1=35WHEREid2=22;--将会报错CHECKOPTIONfailed(因为执行该语句之后,id2=22记录将从ldq_t3消失) DELETEFROMldq_t3WHEREid2=22;--执行成功