首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQL Server数据库中的自动递增计数器

SQL Server数据库中的自动递增计数器
EN

Stack Overflow用户
提问于 2014-02-18 16:38:04
回答 4查看 2.3K关注 0票数 0

我是SQL Server的新手,我使用过MySQL (基础开发)。现在,我想在我的SQL Server中创建一个表,它根据行的添加和删除来执行自动递增/递减。

为了创建一个表,我找到了这个。例如,我创建了我的数据库,但它并没有那么好地工作。

代码语言:javascript
运行
复制
CREATE TABLE Persons
(
   ID int IDENTITY(1,1) PRIMARY KEY,
   LastName varchar(255) NOT NULL,
   FirstName varchar(255),
   Address varchar(255),
   City varchar(255)
)

当我删除任何行时,我的ID仍然应该从2-1 or 6-5 or 7-6中递减,有时它会从7-9 or 6-9中自动递增。而且它也不能完美地工作。

那么,谁能告诉我如何解决这个问题,我已经尝试了将近24个小时,直到现在都没有结果。

请帮我解决这个问题。

EN

回答 4

Stack Overflow用户

发布于 2014-02-18 16:52:04

性能会很糟糕--而且会有触发器。1行删除可以转变为1亿行更新,随后是10亿行级联更新。这是一个可怕的设计。

这就是为什么没有数据库支持它(包括MySQL)。

该ID在用完时会被起诉,并且主键永远不应因一时兴起而更改。想象一下,你有一百万行,然后删除ro2 nr 2--也就是999997次更新,然后更新所有在外键约束中使用该行的行。

票数 1
EN

Stack Overflow用户

发布于 2014-02-18 16:48:10

据我所知,SQL Server没有在删除某些行后自动更新标识列的机制。我认为这种类型的机制也会使性能变得更差,因此不会执行这种类型的任务。

出现在我脑海中的第一个简单任务是trigger,它监听行的删除。一旦进行了删除,触发器将相应地更新标识列。但是,您必须了解SQL Server实例的性能将非常糟糕,例如,考虑到100万行的更新。

票数 0
EN

Stack Overflow用户

发布于 2014-02-18 17:05:35

属性会在删除行时导致列值出现间隙。即使正在进行插入并且插入失败,标识列值也会递增,并且不会回滚。

如果你真的想要连续的值,你应该管理一个包含当前最大值的单独的表,并在插入和删除行时更新它。

您可以创建一个存储过程来实现自定义排序逻辑,在该逻辑中,包含单行和单列的表将根据传递给存储过程的参数进行更新,该参数指示插入正在进行还是正在删除。See here for more

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21848188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档