在某些情况下,我们需要获取或了解那些值尚未被占用的记录。
无论是因为我们想插入一个新值,还是因为过了一段时间后想重构我们的表。
要做到这一点,你可以使用以下脚本:
SELECT t.id + 1
FROM Table1 t
WHERE NOT EXISTS (
SELECT *
FROM Table1 t2
WHERE t2.id = t.id + 1
)
LIMIT 1
我们必须替换表的名称,以及我们正在查找的属性。
现在让我们看一个例子。假设我们想在 creature 中搜索第一个空闲记录。
首先我们必须确定它的主键:guid
SELECT t.`guid` + 1
FROM `creature` t
WHERE NOT EXISTS (
SELECT *
FROM `creature` t2
WHERE t2.`guid` = t.`guid` + 1
)
LIMIT 1
运行查询后,在这种情况下我们会得到数字 15 作为结果。
我们现在必须做的是通过一个 SELECT 来检查这个值是否未被使用:
SELECT * FROM `creature` WHERE `guid`=15;
为了验证信息是否正确,我把前 16 条记录留给你看。
| guid | id | map | zoneId |
|---|---|---|---|
| 1 | 2843 | 0 | 0 |
| 2 | 7853 | 0 | 0 |
| 3 | 2499 | 0 | 0 |
| 4 | 2838 | 0 | 0 |
| 5 | 2839 | 0 | 0 |
| 6 | 2626 | 0 | 0 |
| 7 | 2482 | 0 | 0 |
| 8 | 8123 | 0 | 0 |
| 9 | 9459 | 0 | 0 |
| 10 | 9520 | 0 | 0 |
| 11 | 1215 | 0 | 0 |
| 12 | 1218 | 0 | 0 |
| 13 | 30140 | 571 | 0 |
| 14 | 30156 | 571 | 0 |
| 16 | 32442 | 571 | 0 |
如你所见,数字 15 是可用的。