【问题标题】:What Happens To Auto Increment, If we delete a row in SQL自动增量会发生什么,如果我们在 SQL 中删除一行
【发布时间】:2013-12-14 19:06:37
【问题描述】:

这是一个初学者的问题。因为我现在无法访问 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. 删除所有表详细信息)。

【问题讨论】:

  • 在 mysql 中它会从你离开的地方继续,但有一个命令可以重置它:ALTER TABLE tablename AUTO_INCREMENT = 1
  • 你可以在sqlfiddle.com上运行测试
  • 你能定义“截断所有字段”吗?
  • 亚当,我想知道这两个条件。对于提供的两个示例图像。希望你能看看并提供解释。
  • 是的,如果我执行 TRUNCATE TABLE TABLE_NAME 会发生什么;我重新输入另一组表格详细信息??另外,如果我从 table_name WHERE 中删除会发生什么;我重新输入另一组表格详细信息??在上述两种情况下,自动递增会发生什么?当我输入新的详细信息时,编号将再次从我离开的位置开始,即 105、106 等等(或)它会再次从 1、2、3 等开始......

标签: sql-server auto-increment


【解决方案1】:

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

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 序列。例如:

DELETE dbo.floob;

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

SELECT id, name FROM dbo.floob;

结果:

id    name
--    -----
4     aaron

但是,如果您发出 TRUNCATE TABLEIDENTITY 序列将被重置。

TRUNCATE TABLE dbo.floob;

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

SELECT id, name FROM dbo.floob;

结果:

id    name
--    ----
1     bert

如需更多信息,请参阅the documentationGoogle

【讨论】:

  • 我想知道的是。如果我做 TRUNCATE TABLE TABLE_NAME;我重新输入另一组表格详细信息??另外,如果我从 table_name WHERE 中删除会发生什么;我重新输入另一组表格详细信息??在上述两种情况下,自动递增会发生什么?当我输入新的详细信息时,编号将再次从我离开的位置开始,即 105、106 等等(或)它会再次从 1、2、3 等开始 - 你理解正确。这是一个干净的解释。你清除了我的疑问..!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-25
  • 1970-01-01
  • 2019-07-24
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多