关于delete视图的一个小实验

今天在学习delete和truncate的区别的时候,这篇文章:

https://www.cnblogs.com/wojiaochuichui/p/9523005.html

提到 delete 可以删除view中的数据,一时好奇,做了一个实验,顺便还发现了一个有意思的现象,记录如下:

1.创建视图

create view v_wttttest_0221
as
select 1 as id,'a' as name from dual
union
select 2 as id,'b' as name from dual
union
select 3 as id,'c' as name from dual

2.删除视图某一条记录

关于delete视图的一个小实验

 

 究其原因,可能是原表不是正常的表导致的,这个不是重点

3.创建一个正常的视图,再执行删除操作

create table t_wttttest_0221 as select * from v_wttttest_0221

select * from t_wttttest_0221

create view v_wttttest_0221new
as
select * from t_wttttest_0221

select * from v_wttttest_0221new
delete from v_wttttest_0221new where id=1

真的可以删除了!

关于delete视图的一个小实验

 

 再查看原表:

关于delete视图的一个小实验

 

 和之前的想法也有点一样,只是没有这么确定,实验做完了就确定了

解释如下:
由于视图  没有相应的存储空间,视图中的数据不是存放在视图中的,对视图的一切操作最终都要  转换成对基本表的操作。

对视图使用 delete语句 可以删除底层表中的数据,与使用  drop view 语句删除视图是不同的,使用drop view 语句是删除整个视图,但不删除与该视图有关的底层表中的数据。

 

以上就是这个小实验的过程~

 

上一篇:Stream流排序相关


下一篇:Java程序员面试中的多线程问题