Sqlite 编辑只读视图

Sqlite 编辑只读视图,sqlite,Sqlite,我有一个列,我想编辑它的一些行。问题是该表是一个视图,因此我无法编辑行。如何解决此问题?如果是视图,则不是表。视图的数据来自一个或多个其他表。编辑基础表,当您检查视图中的数据时,它将反映您所做的更改。SQL视图是基于SQL SELECT查询的虚拟表。实际上,视图非常接近真实的数据库表(它与常规表一样具有列和行),除了真实表存储数据,而视图不存储数据。视图的数据在引用视图时动态生成。视图引用一个或多个现有数据库表或其他视图。实际上,每个视图都是其中引用的表数据的筛选器,此筛选器可以限制引用表的列和

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

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

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


如果要修改表中的数据,则不能使用视图进行修改。SQL视图始终是只读的。如果要在视图之外修改表,请使用类似于
UPDATE
altertable
语句的语句。

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

正如dan04所指出的,您可以使用触发器来更新视图(与大多数其他数据库一样)。有关sqlite,请参见

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


在大多数数据库中,视图当然不总是只读的(尽管在sqlite中也是如此)。大多数数据库支持编辑单表非聚合视图。一些数据库也支持编辑多表视图。感谢您指出这一点。如果您对基础表具有适当的权限,则可以在视图中更新数据。但是,SQLite中的视图始终是只读的。
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