为什么即使插入失败,SQL Server 也会生成一个新的单一标识值?

乔塞隆

创建表并将其各自字段设置为 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SQL Server从一列中生成一组特定的年份值,这给了我一个单一的日期/年份

来自分类Dev

SQL Server从一列中生成一组特定的年份值,这给了我一个单一的日期/年份

来自分类Dev

SQL Server数据库在插入时生成一个已经存在的密钥,为什么?

来自分类Dev

如何从SQL Server获取下一个标识值

来自分类Dev

如何获取和锁定下一个标识值SQL Server

来自分类Dev

从表中复制一行并在 SQL-SERVER 中插入一个新值

来自分类Dev

为什么在Clojure的瞬态映射中插入1000 000个值会生成一个包含8个项目的映射?

来自分类Dev

一个表在SQL Server中可以有两个标识列吗?

来自分类Dev

SQL Server可以基于另一个列创建一个标识列吗

来自分类Dev

为什么我在插入大约 1 亿的值时收到 SQL Server 错误

来自分类Dev

将一个表中的值插入到 SQL Server 中的另一个表中

来自分类Dev

SELECT每个ID仅一个值-SQL Server

来自分类Dev

从另一个表SQL Server更新值

来自分类Dev

在SQL Server中对操作使用最后一个值

来自分类Dev

SQL Server:仅增加行号一个值

来自分类Dev

SQL Server获得第一个匹配值

来自分类Dev

SQL Server XQuery,如何选择一个值

来自分类Dev

SQL Server存储过程仅返回一个值

来自分类Dev

如何选择第一个值 - SQL Server

来自分类Dev

SQL Server:在表中插入一堆行,每100个生成一个“批处理ID”?

来自分类Dev

SQL Server:更新,设置另一个选择内的一个值

来自分类Dev

SQL Server查询以另一个表值更新一个表列值

来自分类Dev

SQL Server:使用一个动态查询、常量等将值插入到表中

来自分类Dev

如何根据 SQL Server 中的另一个表列值限制插入到表?

来自分类Dev

C#WPF生成一个连续的int值并将其保存在SQL Server上

来自分类Dev

为什么struts2 html表会生成一个额外的<tr> </ tr>

来自分类Dev

为什么“(seed * 9301 + 49297)%233280 / 233280.0”会生成一个随机数?

来自分类Dev

为什么在乘法中使用long int会生成一个奇数?

来自分类Dev

如何在SQL Server中手动增加一个唯一标识符字段(如整数)?

Related 相关文章

  1. 1

    SQL Server从一列中生成一组特定的年份值,这给了我一个单一的日期/年份

  2. 2

    SQL Server从一列中生成一组特定的年份值,这给了我一个单一的日期/年份

  3. 3

    SQL Server数据库在插入时生成一个已经存在的密钥,为什么?

  4. 4

    如何从SQL Server获取下一个标识值

  5. 5

    如何获取和锁定下一个标识值SQL Server

  6. 6

    从表中复制一行并在 SQL-SERVER 中插入一个新值

  7. 7

    为什么在Clojure的瞬态映射中插入1000 000个值会生成一个包含8个项目的映射?

  8. 8

    一个表在SQL Server中可以有两个标识列吗?

  9. 9

    SQL Server可以基于另一个列创建一个标识列吗

  10. 10

    为什么我在插入大约 1 亿的值时收到 SQL Server 错误

  11. 11

    将一个表中的值插入到 SQL Server 中的另一个表中

  12. 12

    SELECT每个ID仅一个值-SQL Server

  13. 13

    从另一个表SQL Server更新值

  14. 14

    在SQL Server中对操作使用最后一个值

  15. 15

    SQL Server:仅增加行号一个值

  16. 16

    SQL Server获得第一个匹配值

  17. 17

    SQL Server XQuery,如何选择一个值

  18. 18

    SQL Server存储过程仅返回一个值

  19. 19

    如何选择第一个值 - SQL Server

  20. 20

    SQL Server:在表中插入一堆行,每100个生成一个“批处理ID”?

  21. 21

    SQL Server:更新,设置另一个选择内的一个值

  22. 22

    SQL Server查询以另一个表值更新一个表列值

  23. 23

    SQL Server:使用一个动态查询、常量等将值插入到表中

  24. 24

    如何根据 SQL Server 中的另一个表列值限制插入到表?

  25. 25

    C#WPF生成一个连续的int值并将其保存在SQL Server上

  26. 26

    为什么struts2 html表会生成一个额外的<tr> </ tr>

  27. 27

    为什么“(seed * 9301 + 49297)%233280 / 233280.0”会生成一个随机数?

  28. 28

    为什么在乘法中使用long int会生成一个奇数?

  29. 29

    如何在SQL Server中手动增加一个唯一标识符字段(如整数)?

热门标签

归档