chi*_*org 0 mysql sql auto-increment unique-key
在我的数据库应用程序中,我需要为每个客户提供一个唯一的4位数字段.直到9999我才能使用自动增量,但之后我将不得不重复使用已被删除的客户数量(在给定时间内不会超过5000个客户,但在生命周期内可能会有超过9999个客户)系统).
问题1:是否有(My)SQL语句来查找下一个可重用的空闲号码?
问题2:如果我得到号码,将其分配给新客户并将客户全部保存在一个交易中,同时发生的类似交易将由数据库按顺序排列,这样数字就不会发生冲突,对吧?
你最好存储一个表,其中定义了所有10,000个可能的值,并且每个表都有一个"使用中"标志.这样,释放重复使用的数字是设置"inuse = false"的简单更新.
也使得找到最低可用值变得简单
SELECT idstring
FROM idstringtable
ORDER BY idstring ASC
WHERE (available = 1)
LIMIT 1
Run Code Online (Sandbox Code Playgroud)
使用适当的锁/事务执行此操作可以防止两个或多个请求获得相同的ID,并且因为它是一个小表,执行全局表锁定不会显着影响性能.
否则,你会被困在用户桌旁翻找,试图在编号序列中找到第一个"缺口".