您可以更新数据库中的视图吗? 如果是这样,怎么样? 如果没有,为什么不呢?
答案 0 :(得分:16)
实际的答案是“它取决于”,没有绝对的。
基本标准是它必须是数据库引擎的可更新视图,也就是说引擎可以唯一地标识要更新的行,其次是字段可更新。如果您的视图具有计算字段或表示父/子连接的乘积,则默认答案可能为否。
然而它也有可能作弊...在MS SQL Server和Oracle中(仅举两个例子)你可以在你试图插入或更新视图时激活触发器,这样你就可以制作服务器没有的内容我认为可以更新为某种东西 - 通常是因为你知道服务器无法从模式中轻易推断出来。
答案 1 :(得分:4)
正确的答案是“它取决于”。例如,您无法更新视图中的聚合列。对于Oracle视图,您可以通过Google获取“可更新的连接视图”,以获取何时可以更新视图的示例。
答案 2 :(得分:3)
PostgreSQL有RULE来创建可更新的VIEW。检查the examples in the manual以了解如何使用它们。
聚苯乙烯。在PostgreSQL中,VIEW是一个RULE,一个选择规则。
答案 3 :(得分:2)
过去无法更新任何视图。视图的主要目的是查看数据,因此得名。它也可以被称为存储查询。
今天,许多数据库引擎都支持更新视图。它受到限制,一些更新实际上是不可能的(例如,计算列,分组等)。
答案 4 :(得分:2)
有两种方法:
INSTEAD OF触发器,它基本上将问题转移给用户。你编写了一些完成这项工作的程序代码。当然,不保证正确性,一致性等。从RDBMS引擎的角度来看,无论在视图中进行什么更新,从基表中删除所有内容的触发器都是完美的。
更加雄心勃勃的是由RDBMS引擎专门处理的视图更新。这里没有取得多大进展:说得客气一点,如果你有一些好主意,那么你可以推出博士论文。在实践中,您最喜欢的RDBMS可能允许一些限制的广告视图更新;查看手册:-)
答案 5 :(得分:2)
是的,它们是可更新的,但并非总是如此。视图可以更新如下:
如果视图包含基于其创建视图的表的主键。
如果视图是基于一个且只有一个表定义的。
答案 6 :(得分:1)
是的 - 语法与更新表
相同Update MyView
Set Col1 = "Testing"
Where Col2 = 3
Go
创建可以更新的视图有几个条件。他们可以找到here
修改强>
我必须添加基于MS SQL的
答案 7 :(得分:1)
是的,您可以,但请查看CREATE VIEW (Transact-SQL)并查看可更新视图
部分答案 8 :(得分:1)
答案 9 :(得分:1)
在SQL Server中创建视图时,引用的表列(列名和序号位置)的元数据将保留在数据库中。在视图为之前,对引用的基表的任何更改(列重新排序,新列添加等)都不会反映在视图中:
•使用ALTER VIEW语句进行更改 •使用DROP VIEW / CREATE VIEW语句重新创建 •使用系统存储过程sp_refreshview
刷新答案 10 :(得分:0)
是的,使用INSTEAD OF触发器。
答案 11 :(得分:0)
我们通常不更新视图。写入视图以根据联接和条件放置从各个表中获取数据。
视图只是一种逻辑,可以在调用它时提供所需的数据集。
但不确定在哪种情况下需要更新视图。