MySQL 查询 ID 生成

MySQL query id generation

我有 table,当我添加一个新行时,我想为它计算一个 ID 号。

条件:

如果我缺少数字,请给出最小的数字 (3) 如果我没有遗漏号码,则给出连续出现的下一个号码 (5)

如何将此条件构建到我的查询中?

我的查询:

INSERT INTO sample(product) VALUES ('$product')

table

product id
name1 1
name2 2
name4 4

如果我缺少 id

的解决方案
product id
name1 1
name2 2
name4 4
name5 3

如果我没有丢失 id 的解决方案

product id
name1 1
name2 2
name3 3
name4 4
name5 5

MySQL 具有生成 auto-increment id 的功能。参见 https://dev.mysql.com/doc/refman/8.0/en/example-auto-increment.html

数字总是递增的。它不会返回并填写缺失的 id 值。这是故意的,也是必要的,以防止并发会话插入行时出现竞争情况。

如果您想在插入新行时查找未使用的值,您会发现为了防止两个并发会话使用相同的值,您最终不得不锁定整个 table。这会影响许多应用程序的性能。

您应该放弃 ID 值必须连续的要求。它们不是有序的行号。您可能总是缺少 id 值,因为您可能会删除行,或回滚插入行的事务,或者 auto-increment 机制甚至可以在生成值时跳过它们。