编辑只读视图

时间:2010-12-17 04:01:30

标签: sqlite

我有一个列,我想编辑它的一些行。问题是该表是一个视图,所以我无法编辑行。我将如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

SQLite不允许您更新视图。但它确实允许triggers视图。因此,您可以编写一个INSTEAD OF UPDATE触发器,对基础表进行适当的修改。

答案 1 :(得分:3)

正如dan04所指出的,您可以使用触发器来更新视图(就像在大多数其他数据库中一样)。对于sqlite,请参阅http://www.sqlite.org/lang_createtrigger.html#instead_of_trigger

带有名为“myview”的视图的示例,其中包含表“my_t2”

CREATE TRIGGER myview_update INSTEAD OF UPDATE ON myview
BEGIN
  UPDATE my_t2 SET field1 = new.field1, field2 = new.field2 WHERE my_t2.key = old.key;
END

答案 2 :(得分:2)

如果是视图,则不是表格。视图的数据来自一个或多个其他表。编辑基础表,当您检查视图中的数据时,它将反映您所做的更改。

答案 3 :(得分:0)

SQL View是一个虚拟表,它基于SQL SELECT查询。本质上,一个视图非常接近真实的数据库表(它具有像常规表一样的列和行),除了真实表存储数据这一事实,而视图不存储数据。引用视图时动态生成视图的数据。视图引用一个或多个现有数据库表或其他视图。实际上,每个视图都是其中引用的表数据的过滤器,此过滤器可以限制引用表的列和行。

如果您希望修改表格中的数据,则无法使用视图进行修改。 SQL视图始终只读。如果您想在View之外修改表格,请使用类似UPDATEALTER TABLE语句的内容。