日期:2014-05-18  浏览次数:20658 次

请教:sql server 中delete语句的执行细节

在sql   查询分析器中执行:
——————————————————————————
create   table   temp1
(
col   int
)

insert   into   temp1(col)   values(1)
insert   into   temp1(col)   values(2)
insert   into   temp1(col)   values(3)
insert   into   temp1(col)   values(4)
insert   into   temp1(col)   values(5)
insert   into   temp1(col)   values(6)
insert   into   temp1(col)   values(7)
insert   into   temp1(col)   values(8)
insert   into   temp1(col)   values(9)

select   *   from   temp1

delete   from   temp1   where   col=8     --删除一行

insert   into   temp1(col)   values(1)     --插入一行

select   *   from   temp1     --新行插入到了原因8的位置

drop   table   temp1     --删除表
————————————————————————————
现象描述:
第一个   ‘select   *   from   temp1’的结果是:
col                  
-----------  
1
2
3
4
5
6
7
8
9

(所影响的行数为   9   行)
第二个‘select   *   from   temp1’的结果是:
col                  
-----------  
1
2
3
4
5
6
7
1
9

(所影响的行数为   9   行)


为什新行没有插入到最后一位呢?
请明白细节的帮忙解答一下。以前总以为插入到后面呢。
谢谢!

------解决方案--------------------
我也想知道了

幫頂了...
------解决方案--------------------
表是一页一页的...删除后,看来空间就留出来了.
不知表创建时能否设置成自动的...不是有压缩表的语句么..
------解决方案--------------------
--应该是你的col列自动加约束了,看一下改过后的代码
create table temp1
(
id int identity PRIMARY KEY,
col int
)

insert into temp1(col) values(1)
insert into temp1(col) values(2)
insert into temp1(col) values(3)
insert into temp1(col) values(4)
insert into temp1(col) values(5)
insert into temp1(col) values(6)
insert into temp1(col) values(7)
insert into temp1(col) values(8)
insert into temp1(col) values(9)

select * from temp1

delete from temp1 where col=8 --删除一行

insert into temp1(col) values(1) --插入一行

select * from temp1 --新行插入到了原因8的位置

drop table temp1 --删除表
------解决方案--------------------
表是按主键排序的.