请教问题:表行删除后再插入相同的纪录

[复制链接]
查看11 | 回复9 | 2008-1-2 17:35:53 | 显示全部楼层 |阅读模式
表行(非索引)删除后再插入相同的行,该插入的行会使用原先行所在的块吗?
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
测试说明会使用
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
不一定,有可能删除行所在的块又被放入了其他的行数据
或者相同的行被插入其他数据块
主要看freelist的排列,当进行插入操作时,oracle会将数据放入队列中第一个满足空间要求的块。
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 2jliu 于 2008-9-2 11:34 发表
测试说明会使用


你应该是在删除操作之后紧接着就进行插入吧
这样经过删除操作的块将位于freelist队列的头部
当进行插入操作时,oracle就很自然的会把数据插入原来的块中
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
弱问一下,这个有什么作用么?
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
呵呵,lz精神可嘉!
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
原帖由 Sea_jk 于 2008-9-2 16:01 发表
弱问一下,这个有什么作用么?

这个没什么用。但它可以增加你对Oracle的了解。
特别如果你自己动手去探索,在探索过程中,你将了解到很多有用的知识。
比如这道题,你想DUMP有新行插入的块,就必须知道块号、文件号,如何知道呢?通过探索,你学会了很多知识。
这些纯理论方面的东西,单纯的一个结果,没有任何的意义,关键在于探索结果的过程。
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
再来点没用的东西补充一下:
如果你删除一行后马上插入,行有可能会被插入到原来的块中,但不会占用原来的空间。比如有下面的表
ID
----
1
2
3
你删除了ID为1的行,马上又插入了ID为1的行,顺序将变为
ID
----
2
3
1
你可以DUMP块一下看看,ID为1的行虽然还在原来的块中,但偏移量已经不同了。
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
一般情况下,被删除的行会先被标记D,并不马上从table块中删除,当下一次update或insert时,
再移除。这时,只要有新加入的行的长度等于或小于原来被删除的行的长度,都有可能使用这一行的空间。
当然也有特殊情况,比如如果删除该行之后的block不在freelist中,那么我们就要等待它重新加入freelist,
并且轮到它被使用时,它的空间才会被使用。这就跟pctfree和pctused有关了。
回复

使用道具 举报

千问 | 2008-1-2 17:35:53 | 显示全部楼层
如果是在同一个transaction中,如果前一个sql删除数据,而后面一个SQL是插入数据,如果该block可以容纳新插入的数据,那ORACLE会在原block中放入新的data。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行