如果我们在SQL中删除一行,自动递增会发生什么

时间:2013-11-28 16:53:25

标签: sql-server auto-increment

这是一个初学者的问题。因为我现在无法访问Microsoft SQL Server。我的问题是关于自动增量功能。

  

http://s10.postimg.org/lev8tvu7t/image.jpg

     

请看一下上表。假设id字段有   给定Microsoft SQL Server中的自动增量选项。怎么了   如果我删除第三行?我的意思是编号会发生什么?   ID 103会自动更改为102吗?或者它会   保持不变,省略'102'号码?

我也有另一个问题......

  

http://s30.postimg.org/7exbjw7r5/image.jpg

     

在上表中,假设我已截断所有字段。   之后我插入了另一组值。会发生什么   ID(自动增量开)字段。新输入的ID是多少?   细节 ??它会是105,106等,还是会从1开始   ?? (在显示的示例中,ID从100开始,只是认为它开始   来自1)。

     

我也想知道两种情况会发生什么。(即1.开启   截断表和2.删除所有表格详细信息)。

1 个答案:

答案 0 :(得分:4)

您已插入的行将保持不变。你可以尝试一下:

CREATE TABLE dbo.floob(id INT IDENTITY(1,1), name NVARCHAR(32));

INSERT dbo.floob(name) VALUES(N'bob'),(N'frank'),(N'KRIZTE');

DELETE dbo.floob WHERE id = 2;

SELECT id, name FROM dbo.floob;

结果:

id   name
--   ------
1    bob
3    KRIZTE

现在,第二个问题,不完全确定“截断所有字段”是什么意思 - 如果您从表中DELETE,则会保留IDENTITY序列。 e.g:

DELETE dbo.floob;

INSERT dbo.floob(name) SELECT N'aaron';

SELECT id, name FROM dbo.floob;

结果:

id    name
--    -----
4     aaron

但是,如果您发出TRUNCATE TABLE,则会重置IDENTITY序列。

TRUNCATE TABLE dbo.floob;

INSERT dbo.floob(name) SELECT N'bert';

SELECT id, name FROM dbo.floob;

结果:

id    name
--    ----
1     bert

有关详细信息,请参阅the documentationGoogle