创建表并将其各自字段设置为 IDENTITY 的查询如下:
CREATE TABLE user (
email varchar(100) primary key
name varchar(30),
pwd varchar(10)
)
更改表以添加 IDENTITY 字段:
ALTER TABLE user ADD id int /*NOT NULL*/ IDENTITY;
email
如果设置了 NULL 或 DUPLICATED 值,则作为 PRIMARY KEY INDEX的字段将失败,例如假设[email protected]
已经存在,确定查询失败,但我将电子邮件更改为[email protected]
SQL Server 为 IDENTITY 字段生成一个新的值基于之前失败的查询。我的问题是为什么会发生这种情况?(这仅适用于 SQL Server 还是其他数据库提供程序)
嗯,这在“CREATE TABLE (Transact-SQL) IDENTITY (Property)”中有明确记录:
- 值的重用- 对于具有特定种子/增量的给定标识属性,引擎不会重用标识值。如果特定的插入语句失败或插入语句被回滚,则使用的标识值将丢失并且不会再次生成。这可能会导致生成后续标识值时出现间隙。
进一步沿着文档还回答了原因并建议如果这是不可接受的该怎么做:
这些限制是为了提高性能而设计的一部分,并且因为它们在许多常见情况下是可以接受的。如果由于这些限制而无法使用标识值,请创建一个单独的表来保存当前值并使用您的应用程序管理对表的访问和编号分配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句