更新视图 === 某些视图不仅可以查询,还可以执行更新、插入、删除操作。但并不是所有视图都可更新,这取决于视图的定义方式。 ### 更新视图中的数据 如果视图足够简单,例如只基于单表、没有复杂聚合和连接,那么通常可以直接更新。 例如: ```sql UPDATE user_simple SET mobile = '13900000000' WHERE id = 1; ``` 如果该视图是可更新视图,那么底层表 `user` 中的数据也会被同步修改。 ### 视图不可更新的部分 以下类型的视图通常不可更新或更新受限: - 含有聚合函数 - 含有 `GROUP BY` - 含有 `DISTINCT` - 含有多表连接且无法明确映射到单表记录 - 含有子查询、`UNION` 等复杂结构 例如下面这种统计视图通常不可直接更新: ```sql CREATE VIEW city_user_total AS SELECT city, COUNT(*) AS total_users FROM user GROUP BY city; ``` 因为它已经不是底层单条记录的直接映射。 ### 小结 视图能否更新,关键取决于它是否仍然清晰映射到底层表记录。单表简单视图通常可更新,统计类和复杂连接类视图通常不可更新。