Autor Zpráva
Apacuka
Profil
Zdravím,
pokud mám ve sloupci ID poslední záznam (třeba 5000), a některé záznamy již jsou z db vymazány, lze nějakým doplněním tohoto INSERTU vložit další záznamy na ty volný pozice?

příklad: řádek s id=200 chybí, tak další záznam nebude mít hodnotu 5001, ale id=200.
Další INSERT by si zase našel volnou pozici a tu doplnil. Pokud by byly všechny záznamy od 1-5000, tak by zase další ID bylo 5001.

INSERT INTO $table (jmeno,heslo,email) VALUES ('$jmeno','$heslo','$email')


Nebo musím nějak pomocí SELECTu zjistit volnou pozici a následným INSERTem ji zaplnit ?

(snad sem to popsal srozumitelně)
Alphard
Profil
Apacuka:
Je dobrý důvod k tomu, aby to fungovalo tak, jak to funguje. Naopak vy s největší pravděpodobností nemáte důvod znovuobsazovat jednoznačné identifikátory a neuvědomujete si možné problémy.
A abych odpověděl, jednoduše to nejde.
Apacuka
Profil
Jednoduše to nejde, nebo to nejde?
Alphard
Profil
Apacuka:
Jednoduše to nejde. Programování není "blbuvzdorné" :-), jestli to vážně chcete, MySQL přímému dosazení ID na volnou pozici bránit nebude.
123456789
Profil *
ID by stejně neměl být využívaný pro jiné potřeby než je zajištění jednoznačné identifikace každého záznamu v dané tabulce. A pokud ho na nic jiného nepotřebujeme, tak nevidím důvod, proč od sloupce ID požadovat aritmetickou posloupnost s diferencí 1. Takže jistě dovolíte, když se zeptám, proč tuto šílenost chcete zajistit?
Apacuka
Profil
Pouze kvůli délce ID :)
Do jedné tabulky budu zapisovat 12 shoutboxů, tak aby za chvíli ID nebylo 7 ciferné :D

Právě že tam budu mít scripty který budou automaticky mazat staré záznamy ppodle data, nebo podle počtu.
Proto sem uvažoval, že bych to mohl uplatnit.
Alphard
Profil
Apacuka:
Musel byste hledat nejnižší volnou pozici a tu dosazovat do insertu. Sice by to šlo, ale bylo by to docela pracné.
Když použijete klasicky int unsigned, můžete jít až po 4294967295, při bigint unsignet potom 18446744073709551615.

To je rozsah myslím více než dostatečný. I když zůstanete u int, musel byste každý den obsadit obsadit skoro 4 miliony řádků, abyste za tři roky dosáhl na horní hranici. Když to bude hrozit, tak za dva a půl roku změníte datový typ na bigint :-)
ninja
Profil
Apacuka: Nepoužívejte autoincrement, místo toho si před vložením najděte nejmenší volné ID a to použijte pro insert. Ale spíše bych doporučil nastavit větší datový typ pro ID a díry nechat být.
Apacuka
Profil
Díky za odpovědi.
Podle uvážení a okolností to nechám jak to je teď :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: