sql >> Databasteknik >  >> RDS >> Mysql

Gör automatisk ökning fyll tidigare raderat nummer

Då vill du inte använda en kolumn för automatisk ökning. Om du vill fylla i luckorna, ställ in den på en int-kolumn och hantera logiken i lagrad proc eller insert.

EDIT:

Eftersom det är en int-kolumn kan du beställa dem numeriskt. Gör bara en SELECT Ids FROM Table Order By Ids för att få alla Id:n och kontrollera om det finns luckor i den returnerade datamängden.

Det finns förmodligen ett smidigare sätt att göra detta, men du kan loopa resultaten med en markör och jämföra med en INT variabel som ökar genom slingan. När du hittar en lucka (ingen matchning) - bryt slingan och använd den INT värde som din INSERT id.

Jag kommer inte att skriva din kod åt dig, men det är några steg för att få dig att gå i rätt riktning. Det borde vara en riktigt grundläggande bit av programmering du borde kunna hantera.

Hoppas detta hjälper.

EDIT #2:

Som andra har noterat är ditt bästa drag att bara lämna luckorna. Såvida det inte finns någon keps på bordet vad gäller längden och Ids MÅSTE vara 1-30 (konstigt), låt det vara. Det är ingen fördel att fylla i luckorna.

EDIT #3:

En sak till att tänka på:om du verkligen måste behålla 1-30 av någon anledning, ta inte bort dina rader. Lägg till en kolumn för att flagga varje rad som aktiv eller inte och uppdatera sedan bara de rader som är inaktiva när du behöver och flagga dem sedan som aktiva. Det här är VÄLDIGT hackigt, men ditt krav är ganska hackigt, så...



  1. Hur implementeras Oracles JDBC-frågetidsgräns?

  2. Hur du formulerar ditt värde som DBA för finanschefer

  3. Välj alla duplicerade rader baserat på en eller två kolumner?

  4. Transaktionsisolering i PostgreSQL