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 机制甚至可以在生成值时跳过它们。
我有 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 机制甚至可以在生成值时跳过它们。