1 drop
- drop操作会删除表结构、依赖的约束、索引以及触发器,并且会将依赖该表的所有存储过程和视图设置为invalid。
- drop操作就会直接删除整个表空间。
- DDL操作,会包含implicit commit,因此不能回滚,也不能不触发触发器。
2 truncate
- truncate 只会删除表中的数据,并不会删除表结构。
- truncate 是相对于先执行drop操作,然后再执行create操作,执行完成后会恢复初始的表空间。
- 是DDL操作,会包含implicit commit,因此不能回滚,也不能不触发触发器。
3 delete
- delete 只会删除表中的数据,并不会删除表结构。
- delete 操作并不会更改所占用的区的空间。
- delete 语句是DML语句,这个操作会放到 rollback segement 中,事务提交之后才生效,并且可以执行对应的触发器。
什么是 Rollback Segment
Rollback Segments是在你数据库中的一些存储空间,它用来临时的保存当数据库数据发生改变时的先前值,Rollback Segment主要有两个目的:
-
如果因为某种原因或者其他用用户想要通过ROLLBACK声明来取消一个人的数据操作,数据就会复原到之前为改变时的值。这种情况只在transaction的过程中有效,如果用户执行了COMMIT命令,那么ROLLBACK SEGMENT里面的值就会标识为失效的,数据改变就将永久化。
-
另一个目的是当有并发的 session 访问了一个数据值改变但事务还没有提交的表。如果一个SELECT语句开始读取一个表同时一个事务也在修改这个表的值,那么修改前的值就会保存到rollback segment里面,SELECT语句也是从ROLLBACK SEGMENT里面读取表的值。