我有个问题.
我的ID主要(IDENTITY)配置为自动递增(类型:int).但是,当我插入一个新行时,这个新的id不是连续的.怎么了?有解决方案吗
编辑:
[...]
[id]int] IDENTITY(1,1) NOT NULL,
[...]
CONTRAINT [PK_Medida] PRIMARY KEY CLUSTERED
(
[id] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)
Kap*_*wal 17
值的唯一性 - 必须使用PRIMARY KEY或UNIQUE约束或UNIQUE索引强制实现唯一性.
事务中的连续值 - 插入多行的事务不能保证获得行的连续值,因为表上可能会出现其他并发插入.如果值必须是连续的,则事务应使用表上的独占锁或使用SERIALIZABLE隔离级别.
服务器重新启动或其他故障后的连续值 -出于性能原因,SQL Server可能会缓存标识值,并且在数据库故障或服务器重新启动期间,某些分配的值可能会丢失.这可能导致插入时身份值的缺口.如果间隙不可接受,则应用程序应使用带有NOCACHE选项的序列生成器,或使用自己的机制生成键值.
重用值 - 对于具有特定种子/增量的给定标识属性,引擎不会重用标识值.如果特定的insert语句失败或者回滚insert语句,则消耗的标识值将丢失,并且不会再次生成.当生成后续标识值时,这可能导致间隙.
也,
如果存在频繁删除的表的标识列,则标识值之间可能会出现间隙.如果这是一个问题,请不要使用IDENTITY属性.但是,要确保没有创建间隙或填充现有间隙,请在显式输入之前评估现有标识值SET IDENTITY_INSERT ON
.
此外,检查标识列属性并检查标识增量值.它应该是1.
Rem*_*anu 16
不要指望身份是连续的.有许多情况可以留下空白.将身份视为抽象数字,并且不附加任何商业意义.
归档时间: |
|
查看次数: |
15795 次 |
最近记录: |