在不存在标识/增量的情况下插入递增的数字
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 函数时锁定它以避免任何冲突 在获取最大值之前使用表锁或设置事务隔离级别锁定表以上是关于在不存在标识/增量的情况下插入递增的数字的主要内容,如果未能解决你的问题,请参考以下文章
PHP MYSQL - 在不使用列名但使用自动增量字段的情况下插入