随笔 - 130  文章 - 1  评论 - 16  阅读 - 12万 

今天在学习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 语句是删除整个视图,但不删除与该视图有关的底层表中的数据。

 

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

 

posted on   水语者9  阅读(565)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
点击右上角即可分享
微信分享提示