Zapewne niejeden z was zauważył, po dodaniu nowego wiersza do tabeli (który ma powiedzmy nr 3), a następnie jego usunięciu wartość auto_increment nie cofa się, tak więc następny wiersz ma numer 4 i pozostaje luka w numeracji. Jest to działanie pożądane z punktu widzenia blogów czy portali internetowych, gdzie przypisanie nowego artykułu pod ostatnio usunięty mogłoby wprowadzić w błąd kogoś, kto dodał ów usunięty artykuł do ulubionych albo wysłał link koledze, który zobaczy zupełnie co innego niż powinien.
Niejednokrotnie jest to jednak działanie niepożądane – przykładem mogą być tu aplikacje działające po sieci LAN, gdzie wyżej wymieniona sytuacja z założenia nie będzie miała miejsca, zaś w których znaczenie ma ciągłość numeracji danych w tabeli.
Poniżej przedstawiono dwie funkcje. Jedna z nich zwraca lukę w numeracji tabeli jako int, przy czym jest to pierwsza napotkana luka. Kolejna z nich zwraca tablicę intów, czyli wszystkie luki w numeracji. Dzięki temu nowy wiersz można dodać w miejsce luki.
Poniższe przykłady szukają luki w kolumnie faktura_id tabeli faktura.
function luka() { $query="SELECT faktura_id FROM faktura ORDER BY faktura_id"; $result=mysql_query("$query") or die(mysql_error()); while ($row=mysql_fetch_array($result)) { $licz++; if ($row['faktura_id']!=$licz) return $licz; } }
function luki() { $query="SELECT faktura_id FROM faktura ORDER BY faktura_id"; $result=mysql_query("$query") or die(mysql_error()); $licz=0; while ($row=mysql_fetch_array($result)) { $licz++; if ($row['faktura_id']!=$licz) { $luki[]=$licz; $licz++; } } return $luki; }

A nie szybciej byloby zrobic tablice mapowania indeksow? Wtedy zamiast indeksu w odwolaniach do bazy uzywamy wartosci pola tablicy w podanym indeksie.
$query = ”SELECT faktura_id FROM faktura ORDER BY faktura_id”;
$result = mysql_query(”$query”) or die(mysql_error());
$licz=0;
while ($row = mysql_fetch_array($result))
{
$licz++;
$indeksy[] = $row['faktura_id'];
}
Zapomnialem dodac, ze to rozwiazanie jest bardziej uniwersalne – np. MSSQL nie pozwala na wstawianie wiersza z dowolnym kluczem, jesli pole jest typu autonumber.