今天在学习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.删除视图某一条记录
究其原因,可能是原表不是正常的表导致的,这个不是重点
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语句 可以删除底层表中的数据,与使用 drop view 语句删除视图是不同的,使用drop view 语句是删除整个视图,但不删除与该视图有关的底层表中的数据。
以上就是这个小实验的过程~