我正在创建一个视图来向用户显示他/她的数据,但我也希望用户能够在这些视图中的某些字段中进行更改。视图中所做的更改是否也反映在基表中?
另外,我是否可以更新由多个基表组成的视图?
答案 0 :(得分:6)
正如Updatable and Insertable Views所述:
某些视图可以更新。也就是说,您可以在
UPDATE
,DELETE
或INSERT
等语句中使用它们来更新基础表的内容。要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。还有一些其他构造使视图不可更新。更具体地说,如果视图包含以下任何内容,则视图不可更新:
DISTINCT
GROUP BY
HAVING
选择列表中的子查询
某些联接(请参阅本节后面的其他联接讨论)
- 中的不可更新视图
FROM
子句
WHERE
子句中的子查询引用FROM
子句中的表仅指文字值(在这种情况下,没有要更新的基础表)
使用
ALGORITHM = TEMPTABLE
(使用临时表总是使视图无法更新)对基表的任何列的多次引用。
[ deletia ]
多表视图有时可以更新,假设可以使用
MERGE
算法进行处理。为此,视图必须使用内部联接(不是外部联接或UNION
)。此外,只能更新视图定义中的单个表,因此SET
子句必须只列出视图中其中一个表的列。使用UNION ALL
的视图是不允许的,即使它们理论上可以更新,因为实现使用临时表来处理它们。