Rollback Segement ,delete与truncate的区别

目录

Rollback Segment

truncate与delete的区别


Rollback Segment

Rollback Segments是在你数据库中的一些存储空间,它用来临时的保存当数据库数据发生改变时的先前值

Rollback Segment主要有两个目的:

1. 如果因为某种原因或者其他用用户想要通过ROLLBACK声明来取消一个人的数据操作,数据就会复原到之前为改变时的值。这种情况只在transaction的过程中有效。

如果用户执行了COMMIT命令,那么ROLLBACK SEGMENT里面的值就会标识为失效的,数据改变就将永久化。

2. 另一个目的是当有并发的session访问了一个数据值改变但事务还没有提交的表。

如果一个SELECT语句开始读取一个表同时一个事务也在修改这个表的值,那么修改前的值就会保存到rollback segment里面,SELECT语句也是从ROLLBACK SEGMENT里面读取表的值。

truncate与delete的区别

truncate table命令将快速删除数据表中的所有记录(保留数据表结构)。这种快速删除与delete from 数据表的删除全部数据表记录不一样。

delete命令删除的数据将存储在系统回滚段中,需要的时候,数据可以回滚恢复,而truncate命令删除的数据是不可以恢复的。咱们做一个测试:

1、建一个带有自增字段的表,加入100万数据

2、分别用TRUNCATE和DELETE删除全部数据(分别执行DELETE FROM `TABLENAME`; TRUNCATE FROM `TABLENAME`;DROP FROM `TABLENAME`;)

3、然后再向表里插入一条数据

最直观是:

1、TRUNCATE TABLE是非常快的

2、TRUNCATE之后的自增字段从头开始计数了,而DELETE的仍保留原来的最大数值

相同点:

  truncate和不带where子句的delete, 以及drop都会删除表内的数据。

不同点:

1、truncate和delete只删除数据不删除表的结构,而drop语句不仅删除全部数据还删除了表的结构; 

2、delete操作会放到rollback segement中,事务提交之后才生效也就是可以回滚。而truncate,drop操作之后原数据不放到rollback segment中,不能回滚

3、delete语句不影响表所占用的extent, 高水线(high watermark)保持原位置不动,也就是自增ID不变化

4、速度,一般来说: drop>truncate >delete

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值