视图更新的问题

昨天去某公司面试数据库,问到视图能不能更新,更新的是那个表,大概是这个问题吧。我突然回忆起以前用sqlserver的时候好像做个这个实验,更新过视图,于是我就答了可以更新,更新的是基表。结果被人鄙视了一番说视图只是一个虚拟表,怎么能更新之类云云。由于我学艺不精,而且是在面试,在我不能完全确定的情况下,否定了自己的看法,但是面试完了之后,越想越不对,于是上网查了,发现视图确实是可以更新的,而且还能够插入。

带个链接,微软关于更新视图的帮助文档:通过视图修改数据


附带可更新视图的条件

只要满足下列条件,即可通过视图修改基础基表的数据:

  • 任何修改(包括 UPDATE、INSERT 和 DELETE 语句)都只能引用一个基表的列。

  • 视图中被修改的列必须直接引用表列中的基础数据。 不能通过任何其他方式对这些列进行派生,如通过以下方式:

    • 聚合函数:AVG、COUNT、SUM、MIN、MAX、GROUPING、STDEV、STDEVP、VAR 和 VARP。

    • 计算。 不能从使用其他列的表达式中计算该列。 使用集合运算符 UNION、UNION ALL、CROSSJOIN、EXCEPT 和 INTERSECT 形成的列将计入计算结果,且不可更新。

  • 被修改的列不受 GROUP BY、HAVING 或 DISTINCT 子句的影响。

  • TOP 在视图的 select_statement 中的任何位置都不会与 WITH CHECK OPTION 子句一起使用。



发此文感叹学艺不精不仅害自己还会害别人啊,另外,公司面试官最好能够对自己提出的问题做个全面的了解,技术发展太快,有些东西也不是你以为的那个样子。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值