为什么派生表在Oracle中是可更新的?

xin*_*hao 5 mysql sql oracle

我刚刚发现派生表在oracle中是可更新的.更新派生表时,基于它的表将作为结果进行更新.

UPDATE (SELECT * FROM T where T.col1='val1') as D SET D.col2 ='some_val'

在执行示例sql之后,将更新表T.

我不明白为什么Oracle支持这个功能.

正如这个问题所描述的那样,在mysql中,派生表是不可更新的.

Dam*_*ver 5

查看Codd的关系数据库规则可能具有指导意义.

规则7是:

规则7:高级插入,更新和删除:

将基本关系或派生关系作为单个操作数处理的能力不仅适用于数据的检索,还适用于数据的插入,更新和删除.

我强调 - 并注意到许多人在关系数据库中出错的一个重要方面是"关系"或"关系"这个词的含义 - 关系就是SQL 中所谓的.许多人认为关系数据库中的"关系"与实体关系模型中的关系是相同的 - 因此可以假设关系在某种程度上与例如外键有关.

现在,我不是说SQL,无论是ANSI标准中体现的,还是体现在任何特定产品中的,都是Codd规则的完整实现(实际上,规则6很成问题),但至少有尝试实现他们在一些产品中.