问题描述
- 对视图 进行增删改 是否能改变其对应的基表的数据呀
- sql问题: 删除视图中的数据其对应的基表中的数据会发生改变吗?
解决方案
有些情况下会,有些情况下不能(比如视图里有sum.avg.count之类的)
解决方案二:
视图是从聚合函数来的话应该不会,因为映射回去有问题。有的数据库将视图实现成了临时表,SQL Server 2005好像就是。
解决方案三:
如果你那个视图,是 单表的, 没写 触发器的。
那么 如果 删除视图中的数据 成功了,那么 表中的数据 就被删除了。
如果那个视图, 写了个 INSTEAD OF 触发器. 但是里面没有任何删除的动作。
那么 可能你 DELETE FROM 视图 最后表的数据,一点也没变化, 也是可以的。
解决方案四:
mysql中可更新视图必须满足一定的条件,参见:http://blog.csdn.net/yangkai_hudong/article/details/7632085
要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSET、UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。
如果视图包含下述结构中的任何一种,那么它就是不可更新的:
(1)聚合函数;
(2)DISTINCT关键字;
(3)GROUP BY子句;
(4)ORDER BY子句;
(5)HAVING子句;
(6)UNION运算符;
(7)位于选择列表中的子查询;
(8)FROM子句中包含多个表;
(9)SELECT语句中引用了不可更新视图;
(10)WHERE子句中的子查询,引用FROM子句中的表;
(11)ALGORITHM 选项指定为TEMPTABLE(使用临时表总会使视图成为不可更新的)。
时间: 2024-12-31 09:25:08