在不存在标识/增量的情况下插入递增的数字

Posted

技术标签:

【中文标题】在不存在标识/增量的情况下插入递增的数字【英文标题】:Inserting incremented number where no identity / increment exists 【发布时间】:2018-05-18 06:02:13 【问题描述】:

我正在使用一个表,该表的“entryorder”列中的每一行都分配了一个数字(不允许为空)

1
2
3

为了插入一行,我可以执行@@rowcount 并将结果分配给变量+1,然后在插入语句中使用它

这是最安全的方法吗?

【问题讨论】:

不,它根本不安全,如果在您查找 @@rowcount 和使用 @@rowcount+1 之间添加新行怎么办? - 这是标识/自动列旨在解决的一个问题,您应该使用一个。 我假设这里的原因是允许您使用 ID 作为排序机制。我强烈反对这一点。只需为此目的制作另一个(计算的?)列。 使用identity/auto_increment/generated always as/serial 列,具体取决于您的数据库。 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。 【参考方案1】:

如果您无法将列属性更改为标识/自动增量,则使用 max 函数获取列的最大值并为新行添加一个。而不是使用@@rowcount

【讨论】:

不幸的是,我无法更改该字段 - 它与一些不同的应用程序相关 - 有没有办法在使用 max 函数时锁定它以避免任何冲突 在获取最大值之前使用表锁或设置事务隔离级别锁定表

以上是关于在不存在标识/增量的情况下插入递增的数字的主要内容,如果未能解决你的问题,请参考以下文章

在不触摸自动增量 ID 字段的情况下选择

PHP MYSQL - 在不使用列名但使用自动增量字段的情况下插入

MongoDB-更新多个文档解决方案-更新文档计数器或在不存在的情况下插入

插入与递增数字序列连接的文本

Spring JPA:如何在不丢失数据的情况下进行更新插入

MySQL - 在不存在的地方插入 [重复]