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

loc*_*ies 1 sql-server auto-increment

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

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

看看上表就知道了。假设 id 字段在 Microsoft SQL Server 中提供了一个 Auto Increment 选项。如果我删除第三行会发生什么?我的意思是编号会发生什么?ID 103会自动改成102吗??或者它会保持不变,省略“102”数字?

另外我还有一个问题...

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

在上表中,假设我已经截断了所有字段。之后,我插入了另一组值。ID (Auto Increment ON) 字段会发生什么。新输入的详细信息的 ID 是什么?它会是 105、106 等等,还是会从 1 重新开始??(在显示的示例中,ID 从 100 开始,只是认为它从 1 开始)。

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

Aar*_*and 5

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

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;
Run Code Online (Sandbox Code Playgroud)

结果:

id   name
--   ------
1    bob
3    KRIZTE
Run Code Online (Sandbox Code Playgroud)

现在,第二个问题,不太确定您所说的“截断所有字段”是什么意思-如果您DELETE从表中取出,IDENTITY则保持顺序。例如:

DELETE dbo.floob;

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

SELECT id, name FROM dbo.floob;
Run Code Online (Sandbox Code Playgroud)

结果:

id    name
--    -----
4     aaron
Run Code Online (Sandbox Code Playgroud)

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

TRUNCATE TABLE dbo.floob;

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

SELECT id, name FROM dbo.floob;
Run Code Online (Sandbox Code Playgroud)

结果:

id    name
--    ----
1     bert
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅文档Google