关于向数据库中的view插入数据
向view中插入的数据会保存在数据库中?我觉得因为view是存储在临时的空间上,它的数据来源于真实的表,如果向view中插入数据,虽然能显示出来,但是如果下次进入数据库后...
向view中插入的数据会保存在数据库中?我觉得因为view是存储在临时的空间上,它的数据来源于真实的表,如果向view中插入数据,虽然能显示出来,但是如果下次进入数据库后,那些插入的数据还是会消失的吧?
你的意思是有些view由于其建立的语句问题,所以能将插入的数据反方向反馈到对应的表中,所以能保存起来?
那么对于我说的这种情况,是不是也是正常的?因为我接触到的view都是直接create的,涉及到很多table的join,所以那些插入到view中的数据应该不会保存下来吧? 展开
你的意思是有些view由于其建立的语句问题,所以能将插入的数据反方向反馈到对应的表中,所以能保存起来?
那么对于我说的这种情况,是不是也是正常的?因为我接触到的view都是直接create的,涉及到很多table的join,所以那些插入到view中的数据应该不会保存下来吧? 展开
1个回答
展开全部
有的VIEW可以插入数据,数据会保存在相应的表中,看建立的语句。
补充:
各类数据库可能对VIEW的INSERT和UPDATE规定有区别,下面是MYSQL的规定:
关于可插入性(可用INSERT语句更新),如果它也满足关于视图列的下述额外要求,可更新的视图也是可插入的:
· 不得有重复的视图列名称。
· 视图必须包含没有默认值的基表中的所有列。
· 视图列必须是简单的列引用而不是导出列。导出列不是简单的列引用,而是从表达式导出的。下面给出了一些导出列示例:
· 3.14159
· col1 + 3
· UPPER(col2)
· col3 / col4
· (subquery)
混合了简单列引用和导出列的视图是不可插入的,但是,如果仅更新非导出列,视图是可更新的。考虑下述视图:
CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;
该视图是不可插入的,这是因为col2是从表达式导出的。但是,如果更新时不更新col2,它是可更新的。这类更新是允许的:
UPDATE v SET col1 = 0;
下述更新是不允许的,原因在于,它试图更新导出列:
UPDATE v SET col2 = 0;
补充:
各类数据库可能对VIEW的INSERT和UPDATE规定有区别,下面是MYSQL的规定:
关于可插入性(可用INSERT语句更新),如果它也满足关于视图列的下述额外要求,可更新的视图也是可插入的:
· 不得有重复的视图列名称。
· 视图必须包含没有默认值的基表中的所有列。
· 视图列必须是简单的列引用而不是导出列。导出列不是简单的列引用,而是从表达式导出的。下面给出了一些导出列示例:
· 3.14159
· col1 + 3
· UPPER(col2)
· col3 / col4
· (subquery)
混合了简单列引用和导出列的视图是不可插入的,但是,如果仅更新非导出列,视图是可更新的。考虑下述视图:
CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;
该视图是不可插入的,这是因为col2是从表达式导出的。但是,如果更新时不更新col2,它是可更新的。这类更新是允许的:
UPDATE v SET col1 = 0;
下述更新是不允许的,原因在于,它试图更新导出列:
UPDATE v SET col2 = 0;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询