Skip to content

Latest commit

 

History

History
43 lines (29 loc) · 1.14 KB

File metadata and controls

43 lines (29 loc) · 1.14 KB

更新视图

某些视图不仅可以查询,还可以执行更新、插入、删除操作。但并不是所有视图都可更新,这取决于视图的定义方式。

更新视图中的数据

如果视图足够简单,例如只基于单表、没有复杂聚合和连接,那么通常可以直接更新。

例如:

UPDATE user_simple
SET mobile = '13900000000'
WHERE id = 1;

如果该视图是可更新视图,那么底层表 user 中的数据也会被同步修改。

视图不可更新的部分

以下类型的视图通常不可更新或更新受限:

  • 含有聚合函数
  • 含有 GROUP BY
  • 含有 DISTINCT
  • 含有多表连接且无法明确映射到单表记录
  • 含有子查询、UNION 等复杂结构

例如下面这种统计视图通常不可直接更新:

CREATE VIEW city_user_total AS
SELECT city, COUNT(*) AS total_users
FROM user
GROUP BY city;

因为它已经不是底层单条记录的直接映射。

小结

视图能否更新,关键取决于它是否仍然清晰映射到底层表记录。单表简单视图通常可更新,统计类和复杂连接类视图通常不可更新。