我有一个列,我想编辑其中的一些行。问题是该表是一个视图,所以我无法编辑行。我该如何继续解决这个问题?
yzxexxkh1#
SQLite不允许你更新视图,但是它允许对视图使用triggers,所以你可以写一个INSTEAD OF UPDATE触发器,对底层的表进行适当的修改。
INSTEAD OF UPDATE
ojsjcaue2#
正如dan04所指出的,您可以使用触发器来更新视图(就像在大多数其他数据库中一样)。http://www.sqlite.org/lang_createtrigger.html#instead_of_trigger包含表“my_t2”的名为“myview”的视图示例
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
62o28rlo3#
如果是视图,则不是表。视图的数据是从一个或多个其他表中提取的。编辑基础表,当您检查视图中的数据时,它将反映您所做的更改。
ifsvaxew4#
SQL视图是基于SQL SELECT查询的虚拟表,从本质上讲,视图非常接近真实的的数据库表(它具有列和行,就像常规表一样),除了真实的表存储数据的事实之外,而视图则不是。视图的数据是在视图被引用时动态生成的。一个视图引用一个或多个现有的数据库表或其他视图。实际上,每个视图都是其中引用的表数据的过滤器,并且该过滤器可以限制引用表的列和行。如果要修改表中的数据,则不能使用视图执行此操作。SQL视图总是只读的。如果要在视图之外修改表,请使用类似UPDATE或ALTER TABLE语句的语句。
UPDATE
ALTER TABLE
4条答案
按热度按时间yzxexxkh1#
SQLite不允许你更新视图,但是它允许对视图使用triggers,所以你可以写一个
INSTEAD OF UPDATE
触发器,对底层的表进行适当的修改。ojsjcaue2#
正如dan04所指出的,您可以使用触发器来更新视图(就像在大多数其他数据库中一样)。http://www.sqlite.org/lang_createtrigger.html#instead_of_trigger
包含表“my_t2”的名为“myview”的视图示例
62o28rlo3#
如果是视图,则不是表。视图的数据是从一个或多个其他表中提取的。编辑基础表,当您检查视图中的数据时,它将反映您所做的更改。
ifsvaxew4#
SQL视图是基于SQL SELECT查询的虚拟表,从本质上讲,视图非常接近真实的的数据库表(它具有列和行,就像常规表一样),除了真实的表存储数据的事实之外,而视图则不是。视图的数据是在视图被引用时动态生成的。一个视图引用一个或多个现有的数据库表或其他视图。实际上,每个视图都是其中引用的表数据的过滤器,并且该过滤器可以限制引用表的列和行。
如果要修改表中的数据,则不能使用视图执行此操作。SQL视图总是只读的。如果要在视图之外修改表,请使用类似
UPDATE
或ALTER TABLE
语句的语句。