mysql更新视图的限制

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;--执行成功

发表回复