更新MySQL中的视图

mis*_*hra 4 mysql views sql-update

我正在创建一个视图来向用户显示他/她的数据,但我也希望用户能够在这些视图中的某些字段中进行更改.视图中所做的更改是否也反映在基表中?

另外,我是否可以更新由多个基表组成的视图?

egg*_*yal 6

可更新和可插入视图中所述:

有些视图是可更新的.也就是说,你可以在语句,如使用它们UPDATE,DELETEINSERT更新基础表的内容.要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系.还有一些其他构造使视图不可更新.更具体地说,如果视图包含以下任何内容,则视图不可更新:

  • 聚合函数(SUM(),MIN(),MAX(),COUNT(),等等)

  • DISTINCT

  • GROUP BY

  • HAVING

  • UNION 要么 UNION ALL

  • 选择列表中的子查询

  • 某些连接(请参阅本节后面的其他连接讨论)

  • FROM子句中的不可更新视图

  • 在子查询WHERE子句是指表在FROM条款

  • 仅指文字值(在这种情况下,没有要更新的基础表)

  • 使用ALGORITHM = TEMPTABLE(使用临时表总是使视图不可更新)

  • 对基表的任何列的多个引用.

[ deletia ]

假设可以使用MERGE算法处理多表视图,有时可以更新多表视图.为此,视图必须使用内部联接(不是外部联接或a UNION).此外,只能更新视图定义中的单个表,因此该SET子句必须只列出视图中其中一个表的列.UNION ALL即使它们在理论上可以更新,也不允许使用它们,因为实现使用临时表来处理它们.