TRUNCATE 与delete的看得见差别
本人新手小白一个,最近找工作的时候别人总是在问 truncate与delete的区别。什么是否去除高水位啊,日志记录多少啊,数据恢复难易程度啊,等等。网上很多。我在这说个我自己的发现。
一个没有用的想法
如果给你两张刚刚数据被删的表,一个用delete,有一个用truncate。你怎么才能分辨出哪张表是用delete,哪张表是truncate?
好像可以用视图看一下谁的水位高,我不知道怎么看。我自己用了一种比较麻烦的方法试验了一番。就是当一个表是truncate的时候,表自身原有的rowid会被释放掉。select * from 表 where rowid = '原有rowid ’ 时会报错,而 delete 不会,只会查不出数据。
场景再现
创建测试表 test1 ,test2
```sql
create table test1 as select * from emp ;
create table test2 as select * from emp ;
select rowid from test1 where rownum = 1;--AAAVGqAAEAACA8DAAA
select rowid from test2 where rownum = 1;--AAAVGrAAEAACA8LAAA
delete from test1;
truncate table test2;
select * from test1 where rowid = 'AAAVGqAAEAACA8DAAA'
--无数据 也不会报错
select * from test2 where rowid = 'AAAVGrAAEAACA8LAAA'
--报错 ora 01410 无效的rowid
个人理解
个人觉得,truncate所谓的降低高水位,就是将之前的rowid释放掉了。之前rowid的定义是 数据存放的物理地址,释放掉物理地址 不就是降低高水位。而delete没有此功能,意味着整个表的数据都被至为空(至为空,可以看到rowid,而delete有rowid却看不到)。
个人情绪
我觉得工作中沟通是很重要的,而专有名词,或者英语简称是我们沟通的很大的敌人。有的时候总是听一些大佬口吐芬芳我却什么都听不懂,半天吐出个 买瓶,这边来个%¥&*¥。个人觉得沟通就是站在对方的立场上,将自己的意思表达清楚。如果只站在自己大佬的高度去说自己东西,而不管对方听没听明白,就不是抱着沟通的意愿去的。能把很虚很空的逻辑说的很明白,才是真大佬,才是真的理解。我相信计算机所有的逻辑都能通过生活中简单的例子找到原型,而不是遥不可及的大佬,用一堆专业术语去解释另外一个专业术语。
本人跨专业小白,对很多名词一脸懵逼。我希望所从事的行业能对小白温柔一点。
如果以上内容有任何不懂的,都可以问我,虽然可能不对,但是一定给你说明白。