在我的数据库应用程序中,我要求每个客户有一个唯一的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
使用适当的锁/事务执行此操作将防止两个或多个请求获得相同的ID,并且由于这是一个小表,因此执行全局表锁不会显着影响性能。
否则,您将被困在用户表周围,试图在编号序列中查找第一个“间隙”。